удалить "\ n" из строки - PullRequest
0 голосов
/ 07 мая 2020

Я недавно изучаю C, и я не узнал об указателях, поэтому мне все еще не разрешено их использовать.

Примечание: Мне не разрешено использовать его или любая функция из библиотеки string.h.

Я написал функцию, которая удаляет "\ n" из строки.

при запуске моей программы мне кажется:

main. c: 20: 14: предупреждение: сравнение указателя и целого числа
main. c: 80: 39: предупреждение: формат не строковый литерал и аргументы формата [-Wformat-security]

Это моя функция:

#include <stdio.h>
#define STRING_SIZE 100

void replace(char str[]){
    int i=0;
    while(str[i]!='\0'){
        if(str[i]=="\n"){
            str[i]='\0';
        }
    }
}

int my_strlen(char s[]) {
    int i = 0;
    while (s[i] != '\0') {
        i++;

    }
    return i;

}

int remover(char s1[], char s2[], char s3[]) //removes the sustring s2 from string s1 and saved it to s3
{
    int i = 0, j, t = 0, found;

    while (s1[i])
    {
        found = 1;//Initilize found to true
        for (j = 0; s2[j] != 0; j++) {
            if (s1[i + j] != s2[j])
                found = 0;//Set not found
        }
        if (found == 0) {
            s3[t] = s1[i];// if not found add char to s3.
            t++;
        }
        else {
            i = i + my_strlen(s2) - 1;//if found skip
        }
        i++;
    }
    s3[t] = 0;
    if (my_strlen(s1) > my_strlen(s3)) {
        return 1;
    }
    return 0;
}



int main() {
    char result_string[STRING_SIZE+1], MainString[STRING_SIZE+1], PatternString[STRING_SIZE+1];

    printf("Please enter the main string..\n");
    fgets(MainString, STRING_SIZE + 1, stdin);
    replace(MainString);

    printf("Please enter the pattern string to find..\n");
    fgets(PatternString, STRING_SIZE + 1, stdin);
    replace(PatternString);

    int is_stripped = remover(MainString, PatternString, result_string);
    printf("> ");
    printf(is_stripped ? result_string : "Cannot find the pattern in the string!");
    return 0;
}

в чем проблема?

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Просто удалите '\n' из строки на месте, изменив исходную строку. Например:

void remove_newline(char str[])
{
    int i;
    for(i=0; str[i] != 0; ++i) 
    { 
        if (str[i] == '\n') 
        { 
            str[i] = 0; 
            break;
        } 
    }
}
0 голосов
/ 07 мая 2020

У вас много проблем:

  1. Ваша функция возвращает char, который является одним символом.
  2. Строка в стиле C должна иметь завершающий нулевой байт. Вы не ставите его на helper. Таким образом, даже если бы вы могли вернуть его должным образом, код, который его получил, не смог бы узнать, какой длины была строка.
  3. Вы размещаете helper в стеке в replace, поэтому helper останавливается существующий, когда вы вернетесь. Так где же будет храниться возвращенная строка?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...