【发布时间】:2013-10-08 07:47:04
【问题描述】:
您好,我试图从 C 字符串中删除一个字符,但输出似乎不正确。例如,如果。 输入字符串 = “你好” 指定要删除的字符 = "l" 我的输出是“HeXXo”。删除字符后,我似乎需要将值推入?
代码如下:
#include <stdio.h>
#include <stdlib.h>
void squeeze(char str[], char c);
void main (){
char input[100];
char c;
printf("Enter string \n");
gets(input);
printf("Enter char \n");
scanf("%c", &c);
printf("char is %c \n", c);
squeeze(input , c );
getchar();
getchar();
getchar();
}
void squeeze(char str[], char c){
int count = 0, i = 0;
while (str[count] != '\0'){
count++;
}
printf("Count = %d \n", count);
for ( i = 0 ; i != count; i++){
if (str[i] == c){
printf("Found at str[%d] \n", i);
str[i] = "";
}
}
printf(" String is = %s", str);
}
【问题讨论】:
-
一些灵感——你可以在不分配额外缓冲区的情况下实现这个
squeeze函数。您迭代字符串,在其中维护两个指针:一个“读取位置”指针和一个“写入位置”指针。我不想破坏乐趣,但这可能会让你开始。 -
哪个输出是正确的? “Heo”或“Helo”还是其他?
-
Freich 的提示一针见血,你应该注意它。本练习的目的是训练您使用两个独立的指针遍历数组序列,答案比您想象的要简单。请注意:
gets()是卑鄙和邪恶的,以至于它在当前标准中已被弃用,并且不会出现在下一个标准中。不要使用它。请改用fgets()。