将一个字符串拆分为一个字符串数组,以及一个标志
Split a string to an array of strings, along with a flag
我正在尝试用 c 编写代码,return 如果字符串中有“&”则为 1,否则为 0。
另外,我在函数中收到的 char*
我想把它放在一个字符数组中,最后是 NULL 。
我的代码是这样的:
char** isBackslash(char* s1, int *isFlag) {
int count = 0;
isFlag = 0;
char **s2[100];
char *word = strtok(s1, " ");
while (word != NULL) {
s2[count] = word;
if (!strcmp(s2[count], "&")) {
isFlag = 1;
}
count++;
word = strtok(NULL, " ");
}
s2[count] = NULL;
return s2;
}
例如,如果原始字符串 (s1) 是“Hello I am John &”。
所以我希望 s2 像:
s2[0] = Hello
s2[1] = I
s2[2] = am
s2[3] = John
s2[4] = &
s2[5] = NULL
并且该函数将 return '1'。我的代码有什么问题?我调试了它,不幸的是,我没有发现问题。
您正在隐藏自己的参数。请参阅下面的工作示例:
#include <stdio.h>
#include <string.h>
#define BUFF_SIZE 256
int isBackslash(char* s1, char s2[][BUFF_SIZE]) {
int isFlag = 0;
int i = 0;
int j = 0;
int n = 0;
while (s1[i] != '[=10=]') {
isFlag |= !('&' ^ s1[i]); // will set the flag if '&' is met
if (s1[i] == ' ') {
while (s1[i] == ' ')
i++;
s2[n++][j] = '[=10=]';
j = 0;
}
else
s2[n][j++] = s1[i++];
}
return isFlag;
}
int main(void) {
char s2[BUFF_SIZE/2+1][BUFF_SIZE];
memset(s2, 0, sizeof(s2));
char s1[BUFF_SIZE] = "Hello I am John &";
int c = isBackslash(s1, s2);
printf("%d\n", c);
int i = 0;
while (s2[i][0] != '[=10=]')
printf("%s\n", s2[i++]);
}
我正在尝试用 c 编写代码,return 如果字符串中有“&”则为 1,否则为 0。
另外,我在函数中收到的 char*
我想把它放在一个字符数组中,最后是 NULL 。
我的代码是这样的:
char** isBackslash(char* s1, int *isFlag) {
int count = 0;
isFlag = 0;
char **s2[100];
char *word = strtok(s1, " ");
while (word != NULL) {
s2[count] = word;
if (!strcmp(s2[count], "&")) {
isFlag = 1;
}
count++;
word = strtok(NULL, " ");
}
s2[count] = NULL;
return s2;
}
例如,如果原始字符串 (s1) 是“Hello I am John &”。
所以我希望 s2 像:
s2[0] = Hello
s2[1] = I
s2[2] = am
s2[3] = John
s2[4] = &
s2[5] = NULL
并且该函数将 return '1'。我的代码有什么问题?我调试了它,不幸的是,我没有发现问题。
您正在隐藏自己的参数。请参阅下面的工作示例:
#include <stdio.h>
#include <string.h>
#define BUFF_SIZE 256
int isBackslash(char* s1, char s2[][BUFF_SIZE]) {
int isFlag = 0;
int i = 0;
int j = 0;
int n = 0;
while (s1[i] != '[=10=]') {
isFlag |= !('&' ^ s1[i]); // will set the flag if '&' is met
if (s1[i] == ' ') {
while (s1[i] == ' ')
i++;
s2[n++][j] = '[=10=]';
j = 0;
}
else
s2[n][j++] = s1[i++];
}
return isFlag;
}
int main(void) {
char s2[BUFF_SIZE/2+1][BUFF_SIZE];
memset(s2, 0, sizeof(s2));
char s1[BUFF_SIZE] = "Hello I am John &";
int c = isBackslash(s1, s2);
printf("%d\n", c);
int i = 0;
while (s2[i][0] != '[=10=]')
printf("%s\n", s2[i++]);
}