我正在通过 strtok 拆分字符串,但发生了一些不同的事情,例如
*tok =strtok(string,"\r\n");
strtok 找到时才\r
拆分字符串而不是整个字符串\r\n
,我希望仅当数据中出现整个字符串时才拆分字符串\r\n
;
要使用多个字符拆分字符串,您可以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;
}
看这里
PS:如果有人愿意,请编辑代码,使其更好一点。
如果要根据子字符串的出现(例如“\r\n”)拆分字符串,则必须使用字符串搜索函数,例如 char * strstr(,)。strstr() 将返回一个指向匹配子字符串的指针。然后,您可以在该点操作结果字符串以从结果中删除 strlen("\r\n") 字节,并继续搜索。
[EDITED] 来自这里的一篇优秀文章,其中引用了这个人的优秀代码
m-qayyums 代码在循环中被调用,以向您展示如何使用 strstr(,) 等查找(并替换)一个子字符串的多次出现,甚至是一个空字符串。人。
#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”我使用上面的代码得到了这个结果:
如果您使用的是 *nix 系统,则可以使用 POSIX Regex 库来实现此结果,如此处所述。
/* 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