将行拆分为单词+ C的数组

时间:2014-10-12 21:33:50

标签: c arrays split

我正在尝试将一行分成一系列单词,但我仍然坚持如何在C中这样做。我的C技能不是很好,所以我无法想到通往"执行"我的想法。她就是我到目前为止所做的:

int beginIndex = 0;
int endIndex = 0;
int maxWords = 10;
while (1) {
   while (!isspace(str)) {
      endIndex++;
   }
   char *tmp = (string from 'str' from beginIndex to endIndex)
   arr[wordCnt] = tmp;
   wordCnt++;
   beginIndex = endIndex;
   if (wordCnt = maxWords) {
       return;
   }
}

在我的方法中,我收到(char * str,char * arr [10]),str是我想要在遇到空格时要拆分的行。 arr是我想要存储单词的数组。有没有办法复制' chunk'我想要的字符串' str'进入我的tmp变量?这是我现在想到的最好的方式,也许这是一个糟糕的主意。如果是这样,我很乐意获得一些更好的方法的文档或技巧。

2 个答案:

答案 0 :(得分:1)

您应该查看C库函数strtok。你只需要输入你想要分解的字符串和一串分隔符。

以下是其工作原理的示例(取自链接网站):

#include <stdio.h>
#include <string.h>

int main ()
{
  char str[] ="- This, a sample string.";
  char * pch;
  printf ("Splitting string \"%s\" into tokens:\n",str);
  pch = strtok (str," ,.-");

  while (pch != NULL) {
    printf ("%s\n",pch);
    pch = strtok (NULL, " ,.-");
  }

  return 0;
}

在您的情况下,不是打印每个字符串,而是将strtok返回的指针分配给数组 arr 中的下一个元素。

答案 1 :(得分:0)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int split(char *str, char *arr[10]){
    int beginIndex = 0;
    int endIndex;
    int maxWords = 10;
    int wordCnt = 0;

    while(1){
        while(isspace(str[beginIndex])){
            ++beginIndex;
        }
        if(str[beginIndex] == '\0')
            break;
        endIndex = beginIndex;
        while (str[endIndex] && !isspace(str[endIndex])){
            ++endIndex;
        }
        int len = endIndex - beginIndex;
        char *tmp = calloc(len + 1, sizeof(char));
        memcpy(tmp, &str[beginIndex], len);
        arr[wordCnt++] = tmp;
        beginIndex = endIndex;
        if (wordCnt == maxWords)
            break;
    }
    return wordCnt;
}

int main(void) {
    char *arr[10];
    int i;
    int n = split("1st 2nd 3rd", arr);

    for(i = 0; i < n; ++i){
        puts(arr[i]);
        free(arr[i]);
    }

    return 0;
}