c - 如何从 C 字符串中删除所有出现的给定字符?

标签 c string

我正在尝试从 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/

相关文章:

c - 两个任意精度二进制整数的除法

c - 是否有C语言单词词典来完成功能?

c - trace_printf 不适用于 float

python - 使用 python netCDF4 将多字符字符串转换为 netcdf

c - wait() 函数是否在处理 SIGCHLD 之前返回?

c - C++ 中文件指针的实例

java - 按分隔符和其他特定字符串分割字符串

Python:os.join.path()

string - 如何在 OpenGL 中的 3d 场景上打印字符串

java - 使用 String hashCode() 方法?