劳驾大师们帮我检验下我写的程序是否符合要求,同时麻烦您能提出更好的建议
这个c语言试题是这样的 :要求把“***abc***ABC123***”变为“***abc***ABC123",只能在源代码上操作、
(我是c语言的初学者,还有很多地方要向诸位大师请教。望您能不吝赐教。由衷的感谢!!!)
我自己琢磨了半天写出的代码是这样的(结果是达到了要求,但我希望能多掌握几种思想与方法):
#include <stdio.h>
#include <string.h>
void main ()
{
char a[]="***abc***ABC123***";
int i,j,l=strlen(a);
for (i=0,j=0;i<l;i++)
if (a[i]!='3')
{
a[j]=a[i];j++;
}
else
{a[j]='3';
for (j=i+1;j<l;j++)
a[j]=' ';
}
puts (a);
}有劳诸位了,如果可以的话请您写出更好的源代码,要是c语言的哦!谢谢了!!!
[解决办法]
- C/C++ code
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char **argv){ char a[] = "***abc***ABC123***"; char *pstr = strstr(a, "3"); if(!pstr) fprintf(stderr, "can't find string!\n"); while(*(++pstr)) *pstr = 0; printf("%s\n", a); exit(0);}
[解决办法]
- C/C++ code
#include <stdio.h>#include <stdlib.h>#include <string.h>int main(int argc, char **argv){ char a[] = "***abc***ABC123***";// char *pstr = strstr(a, "3"); char* b=a; int len=strlen(a); while(*b!='3') { b++; } *(b++)=0; printf("%s\n", a); system("pause"); return 0;}
[解决办法]
void Delete(char *s)
{
for(;*s;s++);
while(*++s=='*');
*++s='\0';
}
[解决办法]
移指针指向串尾,向前移动,比较,当不是 * 号,赋值 '\0'
[解决办法]
请楼上各位试试"*"和""这两种特殊情况
- C/C++ code
char a[]="***abc***ABC123***";int i,L;L=strlen(a);for (i=L-1;i>=0;i--) { if ('*'==a[i]) a[i]='\0'; else break;}