我正在尝试从 C 中的字符串中删除一个字符。我的代码遇到的问题是,它从字符串中删除了该字符的第一个实例,但也删除了字符串中该字符之后的所有内容。例如,从“hello”中删除“l”会打印“he”而不是“heo”
int i;
char str1[30] = "Hello", *ptr1, c = 'l';
ptr1 = str1;
for (i=0; i<strlen(str1); i++)
{
if (*ptr1 == c) *ptr1 = 0;
printf("%c\n", *ptr1);
ptr1++;
}
我需要为此使用指针,并且希望使其尽可能简单,因为我是 C 初学者。 谢谢
最佳答案
你可以这样做:
void remove_all_chars(char* str, char c) {
char *pr = str, *pw = str;
while (*pr) {
*pw = *pr++;
pw += (*pw != c);
}
*pw = '\0';
}
int main() {
char str[] = "llHello, world!ll";
remove_all_chars(str, 'l');
printf("'%s'\n", str);
return 0;
}
这个想法是保持单独的读取和写入指针(pr
用于读取,pw
用于写入),始终使读取指针前进,仅使写入指针前进当它不指向给定字符时。
关于c - 如何从 C 字符串中删除所有出现的给定字符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52902441/