C:将字符串拆分为带分隔符的字符串数组"&&"

时间:2014-04-28 18:31:31

标签: c arrays string

我在C中有点新,所以我需要帮助。 我需要使用分隔符"&&"将字符串拆分为字符串数组, 问题是我尝试使用strtok,但是当我使用它时,看起来strtok无法正确处理,如果它是'&'字符串中的某些位置。

我知道&&和最多256个字符,最多16个部分。 所以我需要创建一个数组arr[16][256]或一个大小为16 * 256的数组。 在任何情况下,每次我尝试我的代码失败的不同之间&和&&

示例:

    char arr[16][255];
    char stringToSplit = "Hello World && How are u doing && more words & bla &";

输出:

    arr[0] = "Hello World ";
    arr[1] = " How are u doing ";
    arr[2] = " more words & bla &";

提前致谢!

这是我试过的:

  int i;
  char *p;
  i = 0;
  p = strtok (stringToSplit ,"&&");
  while (p != NULL)
  {
    arr[i++] = p;
    p = strtok (NULL, "&&");
  }
  for (i=0;i<16; ++i)
    printf("%s\n", arr[i]);

3 个答案:

答案 0 :(得分:0)

strtok()将字符串拆分为字符。

您需要strstr()在字符串中查找字符串,然后将相关字符复制到目标。继续这样做,直到源字符串用完为止。

答案 1 :(得分:0)

一个简单的双嵌套循环就行了。检查“&amp;&amp;”并注意长子字符串和太多子字符串。

void  tubu13(void) {
  #define NUM (16)
  #define SIZ (255+1)

  char arr[NUM][SIZ];
  const char *stringToSplit = "Hello World && How are u doing && more words & bla &";

  const char *p = stringToSplit;
  int n, len;
  for (n = 0; n < NUM; n++) {
    for (len=0; len < SIZ-1; len++) {
      if (p[0] == '\0') {
        break;
      }
      if (p[0] == '&' && p[1] == '&') {
        p += 2;
        break;
      }
      arr[n][len] = *p;
      p++;
    }
    arr[n][len] = '\0';
    printf("  arr[%d] = \"%s\";\n", n, arr[n]);
  }
}

arr[0] = "Hello World ";
arr[1] = " How are u doing ";
arr[2] = " more words & bla &";
arr[3] = "";
...
arr[15] = "";

答案 2 :(得分:0)

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

char *strtokByWord_r(char *str, const char *word, char **store){
    char *p, *ret;
    if(str != NULL){
        *store = str;
    }
    if(*store == NULL) return NULL;
    p = strstr(ret=*store, word);
    if(p){
        *p='\0';
        *store = p + strlen(word);
    } else {
        *store = NULL;
    }
    return ret;
}
char *strtokByWord(char *str, const char *word){
    static char *store = NULL;
    return strtokByWord_r(str, word, &store);
}

int main(){
    char arr[16][255];
    char stringToSplit[] = "Hello World && How are u doing && more words & bla &";
    int i, n;
    char *p;
    i = 0;
    p = strtokByWord(stringToSplit, "&&");
    while (p != NULL){
        strcpy(arr[i++], p);
        p = strtokByWord(NULL, "&&");
    }
    n = i;
    for (i=0;i<n; ++i)
        printf("%s\n", arr[i]);
    return 0;
}