我在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]);
答案 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;
}