2010-04-18 71 views
0

我有一個字符串作爲const char *str = "Hello, this is an example of my string";串解析發生在C

我怎麼能得到的第一個逗號後面的一切。因此,對於此實例:this is an example of my string

感謝

+0

什麼* B用的?你的strchr調用應該是a = strchr(str,','),然後你應該可以使用a作爲你的字符串指針。你必須提前一個(a ++)來跳過角色。 – Joe 2010-04-18 23:01:26

+0

在這裏發佈時不要使用僞代碼 - 或者根本不要使用僞代碼。 – 2010-04-18 23:04:09

+1

請注意,「第一個逗號後的所有內容」都包含逗號後面的**空格**。 – slacker 2010-04-18 23:10:09

回答

2

你可以做一些類似您發佈什麼東西:

char *a, *b; 
int i = 0; 
while (a[i] && a[i] != ',') 
    i++; 
if (a[i] == ',') { 
    printf("%s", a + i + 1); 
} else { 
    printf("Comma separator not found"); 
} 

或者,你可以看看strtokstrstr

隨着strstr你可以這樣做:

char *a = "hello, this is an example of my string"; 
char *b = ","; 
char *c; 
c = strstr(a, b); 
if (c != NULL) 
    printf("%s", c + 1); 
else 
    printf("Comma separator not found"); 
0
const char *result; 
for(result = str; *result; result++) 
    if(*result == ',') 
    { 
     result++; 
     break; 
    } 
//result points to the first character after the comma 

此代碼後,result指向字符串逗號後立即開始。或者到最後的'\ 0'(空字符串),如果在字符串中沒有逗號。

+0

這不區分「無逗號」和「逗號是字符串的最後一個字符」。 – 2010-04-18 23:14:00

+0

@Adam Rosenfield: 而且應該嗎? 「一個不存在的逗號之後的所有內容」都是「沒有」。當然,這取決於所需代碼的邏輯,但在很多情況下,如果您希望分隔符在那裏,最好返回一個空結果,而不是引發錯誤條件並需要額外的代碼來處理它。 – slacker 2010-04-18 23:23:57

2

既然你想要的原始字符串的尾部,沒有必要複製或修改任何東西,所以:

#include <string.h> 

... 
const char *result = strchr(str, ','); 

if (result) { 
    printf("Found: %s\n", result+1); 
} else { 
    printf("Not found\n"); 
} 

如果你想想法如何自己(有用的做,如果你以後想要做的事相似但不完全相同),請看an implementation of strchr

+0

這會給你一個字符串指向*逗號,而不是逗號後的字符。 – 2010-04-18 23:13:19

+0

謝謝,我寫了一行代碼,然後將其更改爲處理NULL返回並在此過程中丟失+1。固定。 – 2010-04-18 23:16:17

+0

Hooray,不重寫'strchr()'的答案。使用你的標準庫,人! – caf 2010-04-19 01:05:27

0

你有正確的想法,以下爲節目是做這件事:

#include <stdio.h> 
#include <string.h> 

static char *comma (char *s) { 
    char *cpos = strchr (s, ','); 
    if (cpos == NULL) 
     return s; 
    return cpos + 1; 
} 

int main (int c, char *v[]) { 
    int i; 
    if (c >1) 
     for (i = 1; i < c; i++) 
      printf ("[%s] -> [%s]\n", v[i], comma (v[i])); 
    return 0; 
} 

它產生了以下的輸出:

$ commas hello,there goodbye two,commas,here 
[hello,there] -> [there] 
[goodbye] -> [goodbye] 
[two,commas,here] -> [commas,here]