繁体   English   中英

从C中的字符串中删除所有“ \\”

[英]Remove all '\' from a string in C

我试图摆脱C中字符串中的所有\\字符。例如,如果字符串为co\\din\\g ,则应将字符串转换为coding

到目前为止,我有代码

  for(i = 0; i < strlen(string); ++i){
    if(string[i] == '\'){

    }
  }

看起来是否存在反斜杠。 但是,我不知道如何删除反斜杠。 我唯一的想法是将下一个字符设置为等于当前字符,但是,我不知道更改字符串的长度如何与内存一起工作。

像这样:

#include <stdio.h>

int main(){
    char st[] = "co\\din\\g";
    int k = 0;
    for (int i = 0; st[i] != '\0'; ++i)
        if (st[i] != '\\')
            st[k++] = st[i];
    st[k] = '\0';
    fputs(st, stdout);

    return 0;
}

这可行。 由于仅删除字符,因此可以写回相同的字符串。 最后,终止符'\\0'将移至较低的索引,而数组的其余部分将被printf忽略。 此外, \\是转义字符,所以要通过\\本身你必须写\\\\

#include <stdio.h>

void nukechar(char s[], char c)
{
    size_t j = 0;
    for (size_t i = 0; s[i] != '\0'; ++i) {
        if (s[i] != c) {
            s[j] = s[i];
            ++j;
        }
    }
    s[j] = '\0';
}

int main(void)
{
    char s[200];
    while (fgets(s, 200, stdin) != NULL) {
        nukechar(s,'\\');
        printf("%s", s);
    }
    return 0;
}

最简单的解决方案是对结果使用第二个字符串:

#include <stdio.h>
#include <string.h>

int main(void)
{
    char result[100] = {'\0'}, string[] = "co\\din\\g";

    for(int i = 0, j = 0; i < strlen(string); i++)
    {
        if(string[i] != '\\')
            result[j++] = string[i];
    }

    printf("%s %s\n", result, string);

    return 0;
}

结果

$ gcc main.c -o main.exe; ./main.exe;
coding co\din\g

注意

必须使用双反斜杠\\\\ ,因此反斜杠后面的字符不会被解释为转义序列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM