【问题标题】:How to cut a string using 2 delimiters如何使用 2 个分隔符剪切字符串
【发布时间】:2013-08-31 13:22:53
【问题描述】:

如何在 C 中使用 2 个分隔符切割字符串?

我从这个平台的用户那里得到一个字符串:

cp <path1> <path2>

我需要将路径放入一个新字符串(每个路径指向一个字符串)。

我尝试使用strstrstrtok,但它不起作用。

我不知道路径的长度。我也只知道它们以 " \" 开头(这是我拥有的分隔符 (space + \))。

这是我尝试过的 #包括 #包括 #包括

int main()
{
  char *c;
  char *ch = malloc(1024);
  while (strcmp(ch, "exit"))
  {
    scanf("%[^\n]%*c", ch); //what was the input (cp /dor/arthur /king/apple)
    c = malloc(sizeof(strlen(ch) + 1));
    strcpy(c, ch);
    char *pch = strtok(c, " //");
    printf("this is : %s \n", pch); //printed "this is: cp"
  }
}

【问题讨论】:

  • 你说它不起作用是什么意思? strstr 和 strtok 允许您在字符串中定位内容,它们应该非常适合这项工作。
  • 请向我们展示您的尝试。
  • 你确定路径本身没有空格(空格)吗?
  • OT:不使用char * c = malloc(strlen(ch) + 1); strcpy(c, ch);,您可能更愿意使用char * c = strdup(ch);
  • sizeof(strlen(ch) + 1)) 返回 size_t 的大小,即 4 或 8,具体取决于您使用的是 32 位还是 64 位操作系统。

标签: c string delimiter


【解决方案1】:

使用 strtok() 。上面的链接包含一个使用strtok().的例子

您可以通过这种方式将 2 个分隔符 (space + \) 与 strtok() 一起使用:

str = strtok(str, " \\");

【讨论】:

  • 您应该真正尝试理解答案中链接的示例。
  • strtok 定位 any 分隔符中的第一个,因此在这种情况下,它将分解每个空格 反斜杠上的输入。 OP 应该改用strstr
  • @Jongware。这不是 cplusplus char * strtok ( char * str, const char * delimiters ); 中的事实 将字符串拆分为标记 对该函数的一系列调用将 str 拆分为标记,这些标记是由作为定界符一部分的任何字符分隔的连续字符序列。
【解决方案2】:

在主函数中?如果是,主函数有 argc (int) 和 *argv[] (string) 参数,你可以做你想做的。

【讨论】:

  • 稍微改变一下你的代码怎么样?您可以使用 int main (int argc, char *arg[]) 而不是 malloc 并在程序参数中传递这些字符串,这样您就可以执行您在评论中显示的内容(//输入是什么......)
  • 我做不到我需要通过scanf来做
  • 但是正如你所看到的,如果你像 ./cp /dor/arthur /king/apple 这样执行你的程序,除非你写了一些东西,所以 scanf 会捕获字符串。
  • 你可以看到这个关于 strtok 的例子:link 它会帮助你。
  • 你的回答并没有真正回答任何问题。
猜你喜欢
  • 2022-01-05
  • 2019-08-29
  • 2018-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 2015-11-10
  • 2012-12-25
相关资源
最近更新 更多