C语言改错,在线等

就是删除字符串中的指定字符,但是有一点不同,例如输入*******ASC*YU***hon*******输出就是*******ASCYUhon*******字符串两边的*号不去掉,就去掉字母中间的*。。。O(∩_∩)O谢谢
#include<stdio.h>
int main(){ char a[81],b[81],*p; int k=0,i=0; scanf("%s",a); p=a; while( *p == '*') { b[k] = *p; k++; p++; i++; } while( *p != '\0') { if (*p != '*') { b[k]=*p; k++; } p++; i++; } while(*(a+i)='\0') { if(*(a+i) = '*') { b[k]=*(a+i); k++; } i++; } puts(b); return 0;}

做得太复杂了。
先扫描一遍字符串,记下第一个不是'*'的和最后一个不是'*'的位置,中间的‘*’就容易去掉了。
//第一个不是'*'的位置
int i,k,pos1,pos2;
for(i=0;a[i]!=0;i++)
{
if(a[i]!='*')
{
pos1=i;
break;
}
}
//最后一个不是'*'的位置
for(i=pos1;a[i]!=0;i++)
{
if(a[i]!='*')
pos2=i;
}
// 去掉中间的
for(i=0,k=0;a[i]!=0;i++)
{
if((i<pos1)||(i>pos2))
{
b[k]=a[i];
k++;
}
else
{
if(a[i]!='*')
{
b[k]=a[i];
k++;
}
}
}
b[k]=0; //最后添上字符串末尾的0。
========================================
你的程序 if(*(a+i) = '*') 错了,应该是 if(*(a+i) == '*')
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-24
输入错了.....应该是用一个循环输入,用%s试图输入字符串是非法的追问

那应该怎么改,不知道字符串中的字符数量呀

追答

这样吧,等我十五分钟,我给你写个,你看看,行吧?

追问

哦哦,也行。O(∩_∩)O谢谢

追答

#include
int main()
{
char a[81],b[81],*p;
int k=0,i=0,j;
for(j=0;a[j-1]!='\n';j++)
{
a[j]=getchar();
}
a[j-1]='\0';
p=a;
while( *p == '*')
{
b[k] = *p;
k++;
p++;
i++;
}
while( *p != '\0')
{
if (*p != '*')
{
b[k]=*p;
k++;
}
p++;
i++;
}
while(*(a+i)='\0')
{
if(*(a+i) = '*')
{
b[k]=*(a+i);
k++;
}
i++;
}
puts(b);
return 0;
}
我把你的输入的地方改了一下,你看看行不行

追问

还是乱码,我再改改吧,不知道自己哪里错了。

追答

那应该是你的算法有问题,改不好可以继续问我O(∩_∩)O

追问

那我自己再改一下,谢谢啦

C语言出现报错咋搞在线等急
有多处错误,修正后如下:include <stdio.h>void main(){ char a; printf("\\n请输入一个字符\\n");\/\/函数名是printf scanf("%c",&a); if(a>='a'&&a<='z'){\/\/删除分号;加大括号{} a-=32; printf("%c",a);\/\/函数名是printf } else if(a>='A'&&a<='Z'){\/\/加大括号...

C语言命令问题..急..在线等
1.在程序编辑完后按f9进行编译 2.要返回编辑窗口修改 程序,按f6,修改后运行编辑 3.要运行程序可选择RUM菜单中的RUN命令,也可用快捷键ctrl+f9 4.观察结果alt+f5。f2是保存。其他都忘记了。上学时的笔记上就记了这么多,你看着用吧。我刚翻出我的c程序设计第二版来看。笔记虽然乱了点,但重点...

C语言 在线等 补充程序 中间那是我写的 帮我看一下有什么错误 改一下...
if(str1[i]==ch)break;count(str1);return count;\/***end***\/ 修改如下:\/***begin***\/ int count =0; \/\/这里先声明和初始化。for(i=0; str1[i] !='0'; i++) \/\/下标是从0开始的。if(str1[i]==ch)count++;return count; \/\/我觉得这是计算字符在字符串中出现...

C语言 在线等 改错!found 下一行的错误 其他不动
有几处错误 首先输入语句scanf("%d",&a[i]);要加取地址符& 还有break用的有问题 中断运行 下面的不会被执行

c语言,在线等高手解答,很短的
scanf("%d,&a[i]");这一行代码错了。改成 scanf("%d",&a[i]);

...之间所有整数和的函数。改了好多遍都有错,在线等,急
include <stdio.h> int sum(int m, int n);int main(){ int m, n;scanf("%d %d", &m, &n);printf("sum = %d\\n", sum(m, n));return 0;} \/* 你的代码将被嵌在这里 *\/ int sum(int m,int n){ int total=0;while(m<=n){ total+=m;m++;} return total;} ...

C语言改错,输入一个整数m计算如下t=1-1\/2-1\/3-1\/4-。。。1\/m 不得增...
double MyLim( int m ){ double t = 1.0;int i;\/***found***\/ for( i = 2; i <= m; i++ )t = t - 1.0\/i;\/*t = 1.0 -1.0\/t;*\/ return( t );} main(){ int m ;system("cls");printf( "\\nPlease enter 1 integer numbers:\\n" );\/***found***\/ scanf...

c语言程序改错,速求高手高奖励,代码如下,我觉得错误是字符串的值Z付...
test.c:3:14: 错误: ‘y1’被重新声明为不同意义的符号 可以判断y0和y1已经被定义了,猜测是math.h,也算是情理之中。所以要改个名。用文本工具替换y0为y01,替换y1为y02,再编译:undefined reference to `getch'哦,linux下面只有getchar(),加上之后,编译通过。程序执行:the best result:...

c语言 在线等
第一题:include <stdio.h>int f(int b[], int n){ int i,r; r=1; for(i=0;i<=n;i++) r=r*b[i]; return r;}main(){ int x,a[]={2,3,4,5,6,7,8,9}; x=f(a,3);printf("%d\\n",x);}运行结果:120 ...

c语言,急,在线等待!错在哪里
刚学吧,要努力啊!首先循环条件(i<=k)不能判断是否成立(k没有初始化)。在有就是s初值不能是1,要不然结果会多1。还有就是应该是sum=1.0\/(sum*1)。sum应定义成float类型。不过你的程序结果是不对的。

相似回答
大家正在搜