我正在通过strtok拆分字符串,但发生了不同的事情,例如
*tok =strtok(string,"\r\n");
strtok只找到\r
然后它拆分字符串而不是整个\r\n
,我希望字符串只有在数据\r\n
中出现整个字符串时才会被拆分;
答案 0 :(得分:2)
要使用多个字符拆分字符串,您可以在循环中使用strstr
只需反复调用strstr
即可查找边界字符串的出现次数。
获得结果后,将指针推进子字符串的长度并再次重复搜索。
这是一个丑陋的例子,但我认为它可以满足您的需求
#include <stdio.h>
#include <string.h>
int main ()
{
char buffer[128];
char *str ="This is a long text \r\n with \r\nmany carriage returns,\
I hate \r\n just this\r\n nothing else\r\n";
char *token="\r\n";
int l=strlen(str);
char *start,*p;
start=str;
p= strstr (str,token);
while(p)
{
strncpy( buffer,str, p-str);
buffer[p-str] ='\0';
printf("%s\n",buffer);
str=p+strlen(token);
if((str-start) >= l)
break;
p= strstr (str,token);
}
if(!p)
printf("%s\n",str);
return 0;
}
参见 HERE
PS:如果有人想要,请编辑代码,使其更好。
答案 1 :(得分:1)
如果要根据子字符串的出现(例如“\ r \ n”)拆分字符串,则必须使用字符串搜索功能,例如char * strstr(,)。 strstr()将返回指向匹配的子字符串的指针。然后,您可以在该点操纵结果字符串,从结果中删除strlen(“\ r \ n”)个字节,然后继续搜索。
[EDITED]来自优秀帖子 here ,并提及 this guy
m-qayyums代码在循环中调用,向您展示如何使用另一个子字符串查找(和替换)子字符串的多次出现,甚至是使用strstr(,)et的空字符串。人。
#include <ansi_c.h>
#include <stdio.h>
#include <string.h>
char *replace_str(char *str, char *orig, char *rep);
int main ()
{
char origStr[]={"this is anggg originalggg lineggg ogggf texgggt"};
char newString[]={"this is anggg originalggg lineggg ogggf texgggt"};
sprintf(newString, "%s", origStr);
while(strstr(newString, "ggg"))
{
sprintf(newString, "%s", replace_str(newString, "ggg", ""));
}
printf("Original String: %s\n", origStr);
printf("New String: %s\n", newString);
getchar();
return 0;
}
char *replace_str(char *str, char *orig, char *rep)
{
static char buffer[4096];
char *p;
if(!(p = strstr(str, orig))) // Is 'orig' even in 'str'?
return str;
strncpy(buffer, str, p-str); // Copy characters from 'str' start to 'orig' st$
buffer[p-str] = '\0';
sprintf(buffer+(p-str), "%s%s", rep, p+strlen(orig));
return buffer;
}
[EDIT_2]用“\ r \ n”替换“ggg”我使用上面的代码得到了这个结果:
答案 2 :(得分:0)
如果您使用的是* nix系统,则可以使用POSIX Regex库来实现此结果,如here所述。
答案 3 :(得分:-1)
/* strtok example */
#include <stdio.h>
#include <string.h>
int main ()
{
char str[] ="- This, a sample string.";
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str," ,.-");
while (pch != NULL)
{
printf ("%s\n",pch);
pch = strtok (NULL, " ,.-");
}
return 0;
}
输出:
Splitting string "- This, a sample string." into tokens:
This
a
sample
string