下面程序的功能是删除字符串中第一次出现的a字符。其中有两处错误,请改正并使程序正确执行。 #include <stdio.h> #include <string.h> void fun(char *s,int n,int *t) { int i,k=0; s[n]='a'; s[n+1]='\0'; while(s[k]!='a') k++; if(k==n){*t=0;} else { for(i=k;i<n;i++) s[i]=s[i+1]; s[i]='\0'; } } int main() { char s[20]; int len,t; printf("Input a string:"); gets(s); len=strlen(s); fun(s,len,t); if(t==0) printf("Not exist!\n"); else printf("Result is:%s\n",s); return 0; }
时间: 2023-12-30 13:03:23 浏览: 133
修改后的程序如下:
```
#include <stdio.h>
#include <string.h>
void fun(char *s,int n,int *t) {
int i,k=0;
while(s[k]!='a' && k<n) k++; // 修改1:应该在判断 s[k]!='a' 的同时判断 k<n,避免数组越界
if(k==n){*t=0;}
else
{
for(i=k;i<n;i++)
s[i]=s[i+1];
s[i-1]='\0'; // 修改2:应该将 s[i]='\0' 改为 s[i-1]='\0',因为前面已经删除了一个字符
*t=1;
}
}
int main() {
char s[20];
int len,t=1; // 修改3:应该给 t 赋初值 1,表示字符串中存在 a 字符
printf("Input a string:");
gets(s);
len=strlen(s);
fun(s,len,&t); // 修改4:应该传递 t 的地址,以便 fun 函数能够修改 t 的值
if(t==0) printf("Not exist!\n");
else printf("Result is:%s\n",s);
return 0;
}
```
主要的修改点如下:
1. 在判断 s[k]!='a' 的同时判断 k<n,避免数组越界;
2. 将 s[i]='\0' 改为 s[i-1]='\0',因为前面已经删除了一个字符;
3. 给 t 赋初值 1,表示字符串中存在 a 字符;
4. 应该传递 t 的地址,以便 fun 函数能够修改 t 的值。
阅读全文