从两个单词之间提取字符串中的单词(C语言)

3

我正在编写一个C程序,其中一个问题是从以下两个单词之间提取一个单词。

ac_auto_lvalue[] =
    "ONLY / GROUP:  OTHERS EXAMPLE  /-----------------------------";

我需要提取“Group:”和“/”之间的单词,这两个单词(“Group:”和“/”)将始终存在,但其中的单词可能会更改,在某些情况下可能没有任何单词...(在上面的示例中,输出将是“OTHERS EXAMPLE”)
有人可以帮我写一个C片段吗?

你能展示一下你目前有的代码吗?strstr()函数会很有用。 - hmjd
不,我没有任何代码,很长时间以来我都没有用C语言编写过任何代码,只是为了快速修复这个问题...虽然我会尝试编写一些代码并进行测试... - Vikas
2个回答

8
请看strstr函数。它可以帮助你在一个字符串中找到特定字符串(例如"Group:")第一次出现的位置,返回一个指向该位置的指针。一旦你有了两个指针(指向字符串的开头和结尾),你就可以使用malloc分配足够的内存(不要忘记终止符'\0'),使用memcpy复制字符,并最后加上终止符使字符串完整。
int main() {
    char ac_auto_lvalue[] = "ONLY / GROUP: OTHERS EXAMPLE /-----------------------------";
    // Adding 7 to compensate for the length of "GROUP: "
    const char *p1 = strstr(ac_auto_lvalue, "GROUP: ")+7;
    const char *p2 = strstr(p1, " /");
    size_t len = p2-p1;
    char *res = (char*)malloc(sizeof(char)*(len+1));
    strncpy(res, p1, len);
    res[len] = '\0';
    printf("'%s'\n", res);
    return 0;
}

1

使用strstr函数来查找Group,将指针增加Group的长度(6)。


对于字符'/',也可以采用同样的方法。假设指向Group结尾(即'p')的指针地址为char* a,'/'的地址由另一个指针char* b保存,则可以使用memcpy在这两个指针之间进行复制。 - tartar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接