Удалить все '\' из строки в C - PullRequest
0 голосов
/ 03 ноября 2018

Я пытаюсь избавиться от всех \ символов в строке на C. Например, если строка co\din\g, она должна преобразовать строку в coding.

Пока у меня есть код

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

    }
  }

Это выглядит, чтобы увидеть, есть ли обратный слеш. Однако я не знаю, как бы я сделал, чтобы убрать обратную косую черту. Моя единственная идея - установить следующий символ равным текущему, однако я не знаю, как изменение длины строки будет работать с памятью.

Ответы [ 3 ]

0 голосов
/ 03 ноября 2018

как это:

#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 голосов
/ 03 ноября 2018

Это работает. Поскольку вы удаляете только символы, вы можете записать обратно в ту же строку. В конце завершение '\0' переместится к более низкому индексу, а остальная часть массива будет просто проигнорирована printf. Кроме того, \ является escape-символом, поэтому для передачи самого \ необходимо написать \\.

#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;
}
0 голосов
/ 03 ноября 2018

Самое простое решение - использовать вторую строку для результата:

#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

Примечание

Необходимо использовать двойную обратную косую черту, \\, поэтому символ, следующий за обратной косой чертой, не интерпретируется как escape-последовательность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...