2013-10-28 95 views
3

什麼是分割字符串並選擇最後一個元素的最有效方法?C:分割字符串並選擇最後一個元素

即我們有一個字符串「www.google.com」

我想拆分此字符串,其中「」發生並選擇將是「COM」的最後一個元素

+0

@快速再次閱讀問題。我正在尋找最有效的方法。 – chuckfinley

回答

6

您可以使用strrchr

const char * tld = strrchr("www.google.com", '.'); 
// tld now points to ".com" 

不要忘記的情況下,檢查NULL點不能被發現。還要注意,它不會返回一個新的字符串,只是一個指向原始字符串中最後發生的'.'的指針。

+0

爲什麼此頁面會說它返回第一個匹配項,而不是最後一個? http://www.tutorialspoint.com/ansi_c/c_strchr.htm – chuckfinley

+0

您錯過了附加'r' – drahnr

+1

「在str指向的字節字符串中查找ch(在轉換爲char後)**最後一次出現**。 「它對我說...你確定你不在'strchr'的頁面上嗎? – Kninnug

0

您可以使用strtok如下

char str[] ="www.google.com"; 
    char *token; 
    token = strtok (str,"."); 
    char *lastToken ; 
    while (token != NULL) 
    { 
    lastToken = token ; 
    token = strtok (NULL, "."); 
    } 
    printf("last token - %s",lastToken); 
+0

無效,因爲我必須經歷所有元素才能達到目的? – chuckfinley

+1

這只是一種做法..您也可以嘗試使用@kninnug建議的strrchr – Subbu

1

我想我會親自做這樣的事情,和使用任何功能(跳過雖然strrchr一些版本實際上可能以這種方式工作,我不認爲他們必然保證):

char *findlast(char *str) 
{ char *c = str, p = NULL; // assuming str is your input string 
    while (*c) 
    { if (*c == '.') 
     p = c; 
    ++c; 
    } 
    if (p) 
    { // p points to the last occurrence of '.' 
    if (*(p+1)) // '.' is not last character 
     return p+1 
    else 
     // not sure what you want here - p+1 points to NULL and would be semantically 
     // correct, but basically returns a 0-length string; return NULL might be better 
     // for some use cases... 
    } 
    else 
    { // p is NULL, meaning '.' did not exist in str 
    return p; 
    } 
} 
相關問題