strchr 和 strrchr 返回相同的结果
Strchr and strrchr returning same result
出于某种原因,无论我尝试 strchr
还是 strrchr
,我都会得到相同的返回值。我不知道为什么。
这是给我带来麻烦的代码段:
printf("Enter a data point (-1 to stop input):\n");
fgets(input, 50, stdin);
char *name = strrchr(input, ',');
if(name)
{
printf("%s", name);
}
输入是Jane Austen, 6
,我想把它分成两个字符串:一个在逗号之前,一个在逗号之后。但是,我使用 strrchr(input, ',');
或 strchr(input, ',');
似乎毫无意义,因为我的输出总是 , 6
。有人可以解释为什么吗?
听起来你想要 strtok
:
char *name = strtok(input, ",");
char *value = strtok(NULL, ",");
一些语言提供了一个字符串函数 split,它接受一个字符串或正则表达式并将该字符串拆分为一个由分隔符分隔的子字符串列表(python、ruby、perl)。构建这样的拆分函数并不太难,尤其是如果您只是拆分单个字符。
char** split(char* string, char delim);
您还需要一个字符串连接函数,以及一个清理分配的函数 space。
char* split_join(char** splitray, char* buffer);
void split_free(char** splitray);
出于某种原因,无论我尝试 strchr
还是 strrchr
,我都会得到相同的返回值。我不知道为什么。
这是给我带来麻烦的代码段:
printf("Enter a data point (-1 to stop input):\n");
fgets(input, 50, stdin);
char *name = strrchr(input, ',');
if(name)
{
printf("%s", name);
}
输入是Jane Austen, 6
,我想把它分成两个字符串:一个在逗号之前,一个在逗号之后。但是,我使用 strrchr(input, ',');
或 strchr(input, ',');
似乎毫无意义,因为我的输出总是 , 6
。有人可以解释为什么吗?
听起来你想要 strtok
:
char *name = strtok(input, ",");
char *value = strtok(NULL, ",");
一些语言提供了一个字符串函数 split,它接受一个字符串或正则表达式并将该字符串拆分为一个由分隔符分隔的子字符串列表(python、ruby、perl)。构建这样的拆分函数并不太难,尤其是如果您只是拆分单个字符。
char** split(char* string, char delim);
您还需要一个字符串连接函数,以及一个清理分配的函数 space。
char* split_join(char** splitray, char* buffer);
void split_free(char** splitray);