[英]How to split string with special characters multiple times or in a continuous manner in C
我有以下字符串,
#98727,72000,2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#,
& 我希望用特殊字符#
分割整個字符串。 為了得到四個#
分隔的字符串集。
之后,這些分隔的字符串集需要使用,
進行拆分,
以單獨獲得例如: 98727 之類的值。
我已經完成分離第一套使用值#
& ,
用下面的代碼。 但是,它並沒有將第二組分開。 我在這組代碼中缺少什么來分隔所有集合及其值?
char buffer[] = "#18115,72000,2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#";
char *ptr = &buffer;
char *p;
for (p = strtok(ptr,""); p != NULL; p = strtok(NULL, ","))
{
printf("Set: %s\r\n", p);
char *n;
for (n = strtok(p,","); n != NULL; n = strtok(NULL, ","))
{
printf("%s\r\n", n);
}
}
並得到這樣的輸出:
Set: 18115,72000,2500,2450,2200,999999,999999
18115
72000
2500
2450
2200
999999
999999
而是由發生第一剖開的#
,然后通過的,
你可以通過發生分裂#
或者,
在一次使用strpbrk()
你可以做類似的事情
char str[]="#98727,72000,2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#2500,2450,2200,999999,999999#,";
char *p;
char num_str[20][10];
int i=0;
for(p=str; (p=strpbrk(p, "#,"))!=NULL; )
{
while(*(++p)=='#' || *p==',');
if(*p=='\0')
{
break; //input string over
}
sscanf(p, "%9[^#,]", num_str[i++]);
printf("\n%s", num_str[i-1]);
}
一個指針p
被維護,它指向下一個#
或,
要在輸入字符串中檢查。 strpbrk()
用於查找此指針值。
strpbrk()
返回一個指針,指向另一個字符串中字符串的任何字符的第一次出現。
找到p
的值后,它會遞增,以便它指向#
或 之后的字符,
如果該字符也是其中之一,則繼續遞增,直到找到另一個字符。 如果這個字符是表示字符串結束的空字符,我們退出外循環。
sscanf()
用於提取字符直到下一個#
或,
。
%9[^#,]
讀取直到但不包括下一個#
或,
。
PS:該\\r
中printf("Set: %s\\r\\n", p);
是多余的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.