【问题标题】:C: split a string and select last element [duplicate]C:拆分字符串并选择最后一个元素[重复]
【发布时间】:2013-10-28 15:49:51
【问题描述】:

分割字符串并选择最后一个元素最有效的方法是什么?

即我们有一个字符串“www.google.com”

我想将此字符串拆分为“。”发生并选择最后一个元素“com”

【问题讨论】:

  • @AShelly 再次阅读了这个问题。我正在寻找最有效的方法。

标签: c


【解决方案1】:

你可以使用strrchr:

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

不要忘记检查NULL,以防找不到点。另请注意,它不会返回新字符串,只是指向原始字符串中最后出现的'.' 的指针。

【讨论】:

  • 为什么这个页面说它返回第一个出现,而不是最后一个? tutorialspoint.com/ansi_c/c_strchr.htm
  • 你错过了额外的r
  • "在 str 指向的字节串中查找 最后 个 ch(转换为 char 之后)。它对我说...您确定您不在strchr 的页面上吗?
  • 啊啊,谢谢。我的坏
【解决方案2】:

我想我个人会做这样的事情,并跳过使用任何功能(尽管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;
  }
} 

【讨论】:

    【解决方案3】:

    你可以使用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); 
    

    【讨论】:

    • 无效,因为我必须遍历所有元素才能到达终点?
    • 这只是其中一种方法。您也可以按照@kninnug 的建议尝试 strrchr
    猜你喜欢
    • 2013-01-02
    • 2020-08-25
    • 2016-09-20
    • 2018-12-26
    • 2012-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    相关资源
    最近更新 更多