下面程序的Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。 注意:请将修改正确后的完整源程序拷贝粘贴到答题区内。 对于没有错误的语句,请不要修改,修改原本正确的语句也要扣分。 当且仅当错误全部改正,且程序运行结果调试正确,才给加5分。 改错时不能改变程序原有的意图,不能改变函数原型。 **输入输出格式要求:不要增加输入提示信息; 按原题要求,先输入字符串s,回车换行后再输入字符c (c为任意字符)。不能修改函数原型。 #include <stdio.h> void Squeeze(char *s, char c); main() { char a[80],c, *s; scanf("%s",p); scanf("%c",c); Squeeze(char *s, char c); printf("%s\n",s); } void Squeeze(char *s, char c); { int i,j; for (i=0; *s+i !=' \0'; i++); { if (*s+i != 'c') { *s+j = *s+i; j++; } *s+i = '\0'; } }
时间: 2024-01-10 22:04:15 浏览: 149
修改后的程序如下:
```c
#include <stdio.h>
void Squeeze(char *s, char c);
int main() {
char a[80], c, *s;
scanf("%s", a);
scanf(" %c", &c);
s = a;
Squeeze(s, c);
printf("%s\n", s);
return 0;
}
void Squeeze(char *s, char c) {
int i, j;
for (i = 0, j = 0; s[i] != '\0'; i++) {
if (s[i] != c) {
s[j] = s[i];
j++;
}
}
s[j] = '\0';
}
```
修改的内容包括:
1. `main`函数中的 `p` 应该是 `s`,因为 `s` 才是指向字符串数组的指针。
2. `scanf`读入 `c` 时,应该在格式控制字符串中加上空格,以忽略前面的换行符。
3. 调用函数 `Squeeze` 时,不应该将参数类型写上,应该直接传递指针和字符。
4. 在函数 `Squeeze` 中,循环的终止条件应该是 `s[i] != '\0'`,而不是 `*s+i !=' \0'`。
5. 判断字符是否等于 `c` 时,应该写成 `s[i] != c`,而不是 `*s+i != 'c'`。
6. 在循环中,如果字符不等于 `c`,应该将其赋值给 `s[j]`,而不是 `s[i]`。
7. 循环结束后,应该将 `s[j]` 赋值为 `'\0'`,以保证字符串的正确性。
经过以上修改,程序可以正确地删除字符串中的指定字符,输出删除后的字符串。
阅读全文