【问题标题】:Trying to split a string using strtok尝试使用 strtok 拆分字符串
【发布时间】:2020-04-09 22:59:31
【问题描述】:

我正在尝试仅提取“Hello World”并将其存储在字符串中。我想忽略第一个“p”。例如,我只想使用 strtok 打印出“Hello World”。 我想删除第一个单词和之后的空格字符。我该怎么做?

int main()
{
    char string[50] = "p Hello world";

}

【问题讨论】:

  • 更具体。你想忽略字符串中的每个p 吗?或者只有当他们开始字符串?或者仅当它们不与任何其他字母相邻时?你的问题很模棱两可。修复它,以便只有一种解释。
  • strtok 已被 strsep(3) 淘汰。
  • @WilliamPursell:据我所知,strsep 不是 ISO C 标准的一部分。因此,它不能使属于 ISO C 标准的函数过时,例如 strtok
  • 对于您的情况strchr (string, ' ') + 1 最简单的方法是在"Hello world" 中获取指向'H' 的指针。您可以打印它puts (strchr (string, ' ') + 1) 或复制到一个新字符串,例如strcpy (string2, strchr (string, ' ') + 1)(和 strchr 将适用于常量字符串)
  • @WilliamPursell 不完全是。来自 strsep 的 Linux 手册页:引入了 strsep() 函数以替代 strtok(3),因为后者无法处理空字段。但是,strtok(3) 符合 C89/C99,因此更便携。

标签: c


【解决方案1】:

首先我取出“p”,然后取出“Hello World”。谢谢各位。


int main()
{
    char string[50] = "p Hello world";
    // Extract the first token
    char *first = strtok(string, " \n");

    // Now extracting hello world only
    char *second = strtok(NULL, "\n");
    printf("%s\n", second);

    return 0;
}

【讨论】:

  • 别忘了尝试puts (strchr (string, ' ') + 1); 作为替代方案。 (这将替换 char string[50] = "p Hello world";return 0; 之间的所有内容,并且如果您声明 char *string = "p Hello world"; 将起作用)
猜你喜欢
  • 1970-01-01
  • 2014-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 2014-07-27
相关资源
最近更新 更多