【问题标题】:Split string with spaces to vector of strings in C将带有空格的字符串拆分为C中的字符串向量
【发布时间】:2015-01-21 10:55:49
【问题描述】:

我有一个char* str,它指向一个字符串“22 3 43 5”。我需要将它存储到一个向量(一维数组)中,比如char *vec[],这样,
vec[0]="22" 等等
怎么做?

【问题讨论】:

  • 使用sscanf。遇到空格时会停止读取。
  • C 语言没有向量。那将是C++。如果你的意思是数组,那么写数组。如果您的意思是在编译时大小未知的数组,请编写动态数组。

标签: c string c-strings


【解决方案1】:

如下图所示:

char str[20] = "22 3 43 5";
char *vec[4];
int i=0;
char *p = strtok(str," ");

while(p!= NULL )
{
   vec[i] = malloc(20); /* Free the memory once you are done using it */
   strcpy(vec[i],p);
   p = strtok(NULL," ");
   i++;
}

如果你有

char* str = "22 3 43 5";

那么str 是一个字符串文字,它是只读的,strtok() 更改了传递的字符串,因此您可能会看到崩溃。

编辑:

strotk() 函数有助于根据分隔符将 char 数组分解为标记。在这里,我使用相同的方法并将 char 数组分解为使用空格作为分隔符的标记,并且每个标记都被复制到向量中。 vec[i]。其中vec 是指针数组,我为每个指针分配内存并将令牌复制到其中。

【讨论】:

  • 我不知道大字符串中以空格分隔的子字符串的数量
  • 它会起作用的。他问他不知道像i < 4 这样的空格的数量。只需删除他可能接受的条件即可。
  • 我可以为我的目的声明一个足够大的向量。对吗?
  • 是的,这只是一个例子
  • 如果你能给我一些代码的见解,我会很有帮助
猜你喜欢
  • 2014-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-13
  • 2017-07-15
  • 2020-11-08
  • 1970-01-01
  • 2023-01-26
相关资源
最近更新 更多