簡體   English   中英

如何在C中多次或以連續方式分割帶有特殊字符的字符串

[英]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:該\\rprintf("Set: %s\\r\\n", p); 是多余的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM