#include <stdio.h> #include <stdlib.h> int main() { char str[100],ptr[100],n; int i,j; printf("Input a string:"); scanf("%s",str); printf("Input a character:"); scanf("%c",&n); for(i=0;str[i]!=0;i++) { if(str[i]==n) continue; for(j=0;;j++) { ptr[j]=str[i]; } } ptr[j+1]='\0'; printf("Results:%s\n",ptr); return 0; }
时间: 2024-03-06 14:49:36 浏览: 74
#include <stdio.h>
4星 · 用户满意度95%
这段代码有几个问题,首先是在读取字符时需要加上一个空格,即将 `scanf("%c", &n)` 改为 `scanf(" %c", &n)`,否则会读取到前一个输入的换行符。
其次,内层循环中的指针 `j` 没有被正确更新,导致新字符串中的字符都被赋值到了同一个位置上,最终结果只包含原字符串中的最后一个字符。
最后,新字符串的结尾应该是 `ptr[j] = '\0'`,而不是 `ptr[j+1] = '\0'`。
以下是修改后的代码:
```c
#include <stdio.h>
int main() {
char str[100], ptr[100], n;
int i, j = 0;
printf("Input a string:");
scanf("%s", str);
printf("Input a character:");
scanf(" %c", &n);
for (i = 0; str[i] != '\0'; i++) {
if (str[i] == n) {
continue;
}
ptr[j++] = str[i];
}
ptr[j] = '\0';
printf("Results:%s\n", ptr);
return 0;
}
```
该程序的思路与之前给出的程序相同,使用一个指针 `j` 追踪新字符串的长度,遍历原字符串中的每个字符,如果该字符不等于给定字符,则将其复制到新字符串中,并将新字符串指针 `j` 加一。最后在新字符串的结尾处添加一个空字符结束字符串。
阅读全文