【问题标题】:C string functionsC 字符串函数
【发布时间】:2012-03-15 02:05:55
【问题描述】:

在 C 中,如何从字符串中提取前 n 个字符,直到在字符串中找到一个空格?本质上,哪个 C 函数会为我找到下一个空格的位置,哪个 C 函数会给我一个子字符串?我正在考虑 C++。如:

string str = "Help me Please!";
int blankPos = str.find(' ');
str.substr(0, blankPos);

谢谢,

【问题讨论】:

    标签: c string find substring substr


    【解决方案1】:
    1. 使用strchr 查找空间。
    2. 分配一个新的char 缓冲区来保存子字符串。
    3. 使用memcpy 将子字符串复制到缓冲区中。

    【讨论】:

      【解决方案2】:

      提示:strchr()

      我需要输入更多字符。

      【讨论】:

        【解决方案3】:
        char str[] = "Help me Please";    // Source string
        char newstr[80];                  // Result string
        
        // Copy substring characters until you reach ' ' (i.e. "Help")
        for (i=0; str[i] != ' '; i++) {
          newstr[i] = str[i];
        }
        newstr[i] = 0;                    // Add string terminator at the end of substring
        

        【讨论】:

        • 感谢您发布答案!虽然代码 sn-p 可以回答这个问题,但添加一些附加信息仍然很棒,比如解释等..
        【解决方案4】:

        如果您只想获取字符串的第一部分,请按照每个人的建议使用strchr()。如果您希望将字符串分解为由空格分隔的子字符串,请查看strtok()

        【讨论】:

          【解决方案5】:

          所以你想要这样的东西:

          #include <string.h>
          
          const char *str = "Help me Please";
          
          //find space charachter or end of string if no space found
          char *substr, *space = strchr(str, ' ');
          int len = space ? (space-str) : strlen(str);
          
          //create new string and copy data
          substr = malloc(len+1);
          memcpy(substr, str, len);
          substr[len] = 0;
          

          【讨论】:

          • 你不应该使用int作为长度,size_t是正确的类型。
          【解决方案6】:
          char* str = "Help me Please";
          int i =0;
          
          //Find first space
          while(str[i] != ' '){
            i++;
          }
          char* newstr;
          newstr = strndup(str+0,i);
          

          我猜你也可以使用 strchr() 来获取字符串中的第一个空格。

          【讨论】:

          • 我很确定 strndup 不是标准的 C 函数。顺便说一句,在while条件下不应该是!=吗?
          • @ChristianRau:这就是我认为我可以使用它的原因。linux.die.net/man/3/strndup
          • 嗯,它是一个 POSIX 扩展,但它不在 C 标准中。如果您真的想使用此功能,您至少应该在答案中注明这种平台依赖性。
          【解决方案7】:

          另一个允许使用多个字符作为分隔符的变体。

          char str[] = "Help me Please";
          char newstr[80]; 
          
          char *p = strpbrk(str, " \t\xA0");   /* space, tab or non-breaking space (assuming western encoding, that part would need adaptation to be trule portable) */
          if(p)
            strlcpy(newstr, str, p - str + 1);
          else
            newstr[0] = 0;
          

          strlcpy 不是标准的,但可以广泛使用。如果在平台上不可用,则很容易实现。请注意,strlcpy 总是将 0 放在最后复制的位置,然后在长度表达式中加上 +1。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2012-04-23
            • 2012-07-16
            • 2011-07-14
            • 2013-12-22
            • 2011-03-25
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多