Как удалить первое слово из строки и сохранить остаток предложения в C? - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь манипулировать строкой, удаляя первый символ или слово перед пробелом и сохраняя оставшуюся часть предложения.

Например:

char *sentence = {"I am home"};

должно стать: "am home"

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

int main(int argc, char** argv) {

    char *sentence = {"I am home"};  
    int space_cnt = 0;
    char *p = sentence;
    char *copy;

    printf("%s\n ", sentence);

        for (int k=0; k<strlen(sentence); k++) {
            if (space_cnt = 0 && ((p=strchr(sentence, ' ')) != NULL)) {
                space_cnt = 1;
            }
            else if (space_cnt = 1) {
                *copy++ = *p;
            }  
        }
    printf("COPY: %s\n", copy);

    return (EXIT_SUCCESS);

}

Токовый выход:

I am home
COPY: 2�

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Поскольку строка - это просто указатель на первый элемент в массиве char, оканчивающийся на NULL, вы можете использовать арифметику указателя для получения строки после первого слова:

char mystring[100] = "Not everybody is going to like this";
char *pstring = mystring;
while(*pstring && *pstring != ' ') 
    pstring++;

puts(pstring);

Вывод:

 everybody is going to like this
0 голосов
/ 19 декабря 2018

Как отмечалось в комментариях, вы никогда не выделяли copy, поэтому вы, по сути, пишете в нераспределенное пространство, что приведет к неопределенному поведению (например, на моем компьютере этот код просто segfaults).

На самом деле вам даже не нужно копировать строку.Вы можете просто указать copy на первый символ после пробела:

char *copy = strchr(sentence, ' ');
if (copy != NULL) {
        copy++;
        printf("COPY %s\n", copy);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...