如何从字符串中删除第一个单词并将其余句子保留在C中?

时间:2018-12-19 17:42:36

标签: c string

我正在尝试通过删除空格前的第一个字符或单词并保留句子的其余部分来操纵字符串。

例如:

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 :(得分:1)

如注释中所述,您从未分配copy,因此您实际上是在写未分配的空间,这将产生未定义的行为(例如,在我的机器上,此代码仅是段错误)。

实际上,您甚至不需要复制字符串。您可以使copy指向空格之后的第一个字符:

char *copy = strchr(sentence, ' ');
if (copy != NULL) {
        copy++;
        printf("COPY %s\n", copy);
}

答案 1 :(得分:1)

由于字符串只是指向以NULL结尾的char数组中第一个元素的指针,因此您可以使用指针算法在第一个单词之后获取字符串:

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