解题思路:
1.在搜索全串过程中,若开始有'*',就将前导'*'存入另一串中,直到发现其它字符或串尾;
2.原串后续所有字符在未到串尾前,若非'*',就接着存入到另一串;
3.将处理好的另一串存回原串。
注意事项:
在步骤二过程中,原串字符非'*'时,访问另一串的下标才可以增加接收新字符,而原串的下标顺序增加访问接下来的字符。
参考代码:
#include<stdio.h> int main(){ void fun(char *); char s[81]; gets(s); fun(s); puts(s); return 0; } void fun(char *a){ int i,j; char b[81]; for(i=0;a[i]=='*'&&a[i]!='\0';i++) b[i]=a[i];//若开始有*就将字符串a前导的*号保存到b中 j=i; while(a[i]!='\0'){ if(a[i]!='*') b[j++]=a[i]; i++; }//a后续字符若非*就保存到b中 b[j]='\0'; for(i=0;b[i]!='\0';i++) a[i]=b[i];//处理好的b串存回a串 a[i]='\0'; }
0.0分
10 人评分
#include <stdio.h> #include <string.h> int fun (char *a) { int i,n; char b[81],*c; c=a; n=strlen(a); for(i=0;i<n;i++,a++) { if(*a!='*') { for(;*a!='\0';i++,a++) { if(*a!='*') b[i]=*a; else if(*a=='*') i--; } break; } else b[i]='*'; } a=c; strcpy(a,b); a[i]='\0'; return 0; } int main() { char s[81]; gets(s); fun(s); puts(s); return 0; }
#include <string.h> #include<stdio.h> void fun(char *a) { int i=0; int len = strlen(a); int count=0; while(a[i]=='*'){ i++; } for(i;i<len; i++){ if(a[i]!='*'){ a[i-count]=a[i]; }else{ count++; } } for(i=len-count;i<len;i++){ a[i]=NULL; } } main() { char s[81]; gets(s); fun(s); puts(s); }
a+b浏览:452 |
C语言程序设计教程(第三版)课后习题10.2 (C语言代码)浏览:755 |
格式化数据输出 (C语言代码)浏览:882 |
简单的a+b (C语言代码)浏览:857 |
简单的a+b (C语言代码)浏览:444 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:585 |
A+B for Input-Output Practice (III) (C语言代码)浏览:455 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:477 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:518 |
C语言程序设计教程(第三版)课后习题6.2 (C语言代码)浏览:479 |