C将char数组拆分为不同的变量

在C中如何用分隔符分隔char数组? 或者操纵字符串更好? 有什么好的C char操作函数?

#include #include int main() { char input[16] = "abc,d"; char *p; p = strtok(input, ","); if(p) { printf("%s\n", p); } p = strtok(NULL, ","); if(p) printf("%s\n", p); return 0; } 

你可以查看这个程序。首先你应该使用strtok(输入,“,”)。输入是你想要spilt的字符串。然后你使用strtok(NULL,“,”)。 如果返回值为true,则可以打印另一个组。

看看strtok() 。 strtok()不是可重入的函数。

strtok_r()是strtok()的可重入版本。 以下是手册中的示例程序:

  #include  #include  #include  int main(int argc, char *argv[]) { char *str1, *str2, *token, *subtoken; char *saveptr1, *saveptr2; int j; if (argc != 4) { fprintf(stderr, "Usage: %s string delim subdelim\n",argv[0]); exit(EXIT_FAILURE); } for (j = 1, str1 = argv[1]; ; j++, str1 = NULL) { token = strtok_r(str1, argv[2], &saveptr1); if (token == NULL) break; printf("%d: %s\n", j, token); for (str2 = token; ; str2 = NULL) { subtoken = strtok_r(str2, argv[3], &saveptr2); if (subtoken == NULL) break; printf(" --> %s\n", subtoken); } } exit(EXIT_SUCCESS); } 

对基于不同分隔符从前一个令牌获得的子字符进行操作的样本运行:

 $ ./a.out hello:word:bye=abc:def:ghi = : 1: hello:word:bye --> hello --> word --> bye 2: abc:def:ghi --> abc --> def --> ghi 

一个选择是strtok

例:

 char name[20]; //pretend name is set to the value "My name" 

你想把它分开在两个单词之间的空格处

 split=strtok(name," "); while(split != NULL) { word=split; split=strtok(NULL," "); } 

我想出了这个。这似乎最适合我。它转换一个数字串并将其拆分为整数数组:

 void splitInput(int arr[], int sizeArr, char num[]) { for(int i = 0; i < sizeArr; i++) // We are subtracting 48 because the numbers in ASCII starts at 48. arr[i] = (int)num[i] - 48; } 

您可以简单地用NULL字符替换分隔符,并将新创建的NULL字符后的地址存储在新的char *指针中:

 char* input = "asdf|qwer" char* parts[10]; int partcount = 0; parts[partcount++] = input; char* ptr = input; while(*ptr) { //check if the string is over if(*ptr == '|') { *ptr = 0; parts[partcount++] = ptr + 1; } ptr++; } 

请注意,如果输入字符串包含超过9个分隔符,则此代码当然不起作用。

我就是这样做的。

 void SplitBufferToArray(char *buffer, char * delim, char ** Output) { int partcount = 0; Output[partcount++] = buffer; char* ptr = buffer; while (ptr != 0) { //check if the string is over ptr = strstr(ptr, delim); if (ptr != NULL) { *ptr = 0; Output[partcount++] = ptr + strlen(delim); ptr = ptr + strlen(delim); } } Output[partcount++] = NULL; }