2013-10-28 112 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; 
    } 
} 
相关问题