我有一个像'&#39 ;;'或','用作原始字符串中的分隔符。我需要拆分字符串并迭代每个字符串。 例如:如果,
char* str = "apples, mangoes , orang; ,ad";
分隔符是','那我需要像
这样的东西while(substr!='\0') {
func(substr);
//some operation maybe like substr=strstr(substr)+1;
}
该函数应该用字符串调用4次:" apples","芒果","红毛; ""广告"
答案 0 :(得分:0)
在您的情况下,str
是字符串文字,因为它在R_ONLY部分中,您不能使用strtok
。
并且strtok
会修改您的str
,这是文字的,会产生运行时错误(Segmentation Fault)。
如果要拆分它,则必须有用户输入。可能fgets
(最喜欢的一个)。
fgets (str, SIZE, stdin); // user input for str
仅当您有字符串的用户输入时才使用strtok
功能。
char * strtok (char *string, const char *delimiter);
这就是你如何使用它。
char *buff = strtok (str, ",;");
while (buff != NULL)
{
printf (buff);
buff = strtok (NULL, ",;");
}
有关字符串函数的更多信息
man string
答案 1 :(得分:0)
strtok
是用于在C
中对字符串进行标记化的便捷工具。另请注意strtok
修改原始字符串。
在你的情况下
char* str = "apples, mangoes , orang; ,ad";
这是字符串文字,它是只读的,如果您在此使用strtok
,则它是未定义的行为。因此,要使用预定义的长度或数组或将此字符串复制到某个临时缓冲区,然后在临时缓冲区上应用strtok
。
例如
int main()
{
char str[] = "apples, mangoes , orang; ,ad";
char *token = strtok (str, ",;");
while (token != NULL)
{
printf ("%s ",token);
token = strtok (NULL, ",;");
}
return 0;
}