下面程序的Squeeze函数的功能是删除字符串s中所出现的与变量c相同的字符。 **输入输出格式要求:无输入输出提示信息,要求可以输入带空格的字符串; 按原题要求,先输入一个字符串s,回车换行后再输入字符c(c为任意字符)。 请调试并改正以下程序。 #include <stdio.h> void Squeeze(char *s, char c); main() { char a[80],c, *s; scanf("%s",p); scanf("%c",c); Squee
时间: 2024-02-19 16:00:44 浏览: 137
ze(s,c); printf("%s\n",a); } void Squeeze(char *s, char c) { int i,j; for(i=j=0; s[i]!='\0'; i++) if(s[i]!=c) s[j++]=s[i]; s[j]='\0'; }
改正后的程序如下:
#include <stdio.h>
void Squeeze(char *s, char c);
int main() {
char a[80],c, *s;
scanf("%s",a); // 将输入的字符串存储到 a 数组中
scanf(" %c",&c); // 加一个空格,避免读取到上一次输入留下的回车符
s = a; // 将指针指向 a 数组的首地址
Squeeze(s,c);
printf("%s\n",a);
return 0;
}
void Squeeze(char *s, char c) {
int i,j;
for(i=j=0; s[i]!='\0'; i++)
if(s[i]!=c) s[j++]=s[i];
s[j]='\0';
}
相关问题
请用c语言编写一个Squeeze函数,它的功能是删除字符串s中所出现的与变量c相同的字符。
好的,这是一个简单的C语言实现:
```c
void squeeze(char s[], int c) {
int i, j;
for (i = j = 0; s[i] != '\0'; i++) {
if (s[i] != c) {
s[j++] = s[i];
}
}
s[j] = '\0';
}
```
这个函数的参数是一个字符数组s和一个整型变量c。它会遍历字符数组s中的每一个字符,如果字符不等于变量c,就把它加入到一个新的字符数组中。最后,把新的字符数组拷贝回原来的字符数组s中。这样,所有与变量c相同的字符就被删除了。
注意,这个函数修改了原来的字符数组s,因此调用之前需要备份原来的字符数组。
下面程序的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'; } }
修改后的完整源程序如下:
```c
#include <stdio.h>
void Squeeze(char *s, char c);
int main() {
char a[80], c, *s;
scanf("%s", a);
getchar(); // 因为后面要读入一个字符,所以需要在此处多读入一个字符,然后丢弃
scanf("%c", &c);
s = a; // 指针 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'; // 将新字符串的结尾置为 '\0'
}
```
主要的修改如下:
1. `main()` 函数中的 `p` 应改为 `a`。
2. `scanf("%c",c)` 应改为 `scanf("%c", &c)`,同时要在前面加上 `getchar()`,以读入多余的回车符,避免影响后面的输入。
3. `Squeeze(char *s, char c);` 应改为 `Squeeze(s, c);`,因为函数调用时不需要再次声明函数的返回值类型和参数类型。
4. `for (i=0; *s+i !=' \0'; i++);` 中的分号应删除,否则循环体中的代码将不会执行。
5. `if (*s+i != 'c')` 应改为 `if (*(s + i) != c)`,因为 `c` 是变量,而不是字符 `'c'`。
6. `*s+j = *s+i;` 应改为 `*(s + j) = *(s + i);`,因为指针的加法运算需要用括号括起来。
7. `*s+i = '\0';` 应改为 `*(s + j) = '\0';`,因为新字符串的结尾应该是 `j` 所指向的位置,而不是 `i` 所指向的位置。
阅读全文