【问题标题】:C extract word from a string between two wordsC从两个单词之间的字符串中提取单词
【发布时间】:2012-04-13 07:30:06
【问题描述】:

我正在编写一个 C 程序,我遇到的问题之一是在两个单词之间提取一个单词,如下所示。

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

我需要提取“组:”和“/”之间的单词,这两个单词(组:“和”/“)将始终存在,但中间的单词可以改变,在某些情况下可能会有什么都没有...(在上面的示例中,输出将是“其他示例”

任何人都可以帮我用 C sn-p 完成上述操作吗?

【问题讨论】:

  • 你能展示你目前拥有的任何代码吗? strstr() 会有用。
  • 没有;我没有任何代码,很长一段时间我没有用 C 编写任何代码,只是为了快速修复这个问题......虽然我会尝试写一些东西并测试......

标签: c extract delimiter


【解决方案1】:

看看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;
}

【讨论】:

    【解决方案2】:

    对 Group 使用 strstr,将该指针增加 Group (6) 的长度。

    【讨论】:

    • 对字符 / 做同样的事情。假设指向 Group 末尾的指针的地址(即“p”)由 char* a 保存,而“/”的地址由另一个指针 char*b 提供帮助,那么您可以使用 memcpy 在这两者之间进行复制指针。
    猜你喜欢
    • 2013-12-12
    • 1970-01-01
    • 2014-05-28
    • 2016-12-27
    • 1970-01-01
    • 1970-01-01
    • 2018-08-16
    • 1970-01-01
    • 2018-12-31
    相关资源
    最近更新 更多