【问题标题】:find blank character in c++ [closed]在c ++中查找空白字符[关闭]
【发布时间】:2017-08-04 23:09:46
【问题描述】:

我想看看下面的代码在C++语言中可以找到字符串中的第一个空白字符或者字符串顶部的空格。

for(;*str == ' '; str++)

【问题讨论】:

  • 有什么问题吗?你想向下移动一个字符串直到第一个空白字符?
  • 那至少是== 而不是=
  • 使用std::findstd::find_if,或者可能是std::string上的成员函数
  • 不要使你得到的答案无效。
  • 注意: 下面的两个示例都工作并且做的事情基本相同。一个更加突出,而另一个紧凑并使用char*的基本原理

标签: c++ char find


【解决方案1】:

此代码将找不到字符串中的第一个空格。相反,它将运行一个无限循环,最终由于未定义的行为而导致崩溃。

您正在寻找的是一直持续到*str 不是空终止符或空白的东西:

for ( ; *str && *str != ' ' ; str++)
    ; // The body of the loop is empty

注意:此代码用于学习练习以了解 C 字符串的工作原理。在 C++ 代码中,您可以改用 std::string,其成员函数可提供此功能,而无需编写任何额外代码。

【讨论】:

  • 他的代码不会在无限循环中运行,但它会溢出缓冲区的末尾,直到崩溃或在随机内存中的某处找到空间。
  • @Geoffrey:有时崩溃并不意味着它不是无限循环。无论如何,使用哈佛架构(数据的单独地址空间),它甚至可以避免崩溃。
  • @Geoffrey 我知道这有点自相矛盾,但这是计算机编程中大多数无限循环的命运:当运行它们的进程由于某种原因终止时,它们最终都会结束。
【解决方案2】:

假设您使用 char* 并希望在以空字符结尾的字符串中查找第一个空白字符:

for (int i = 0; str[i] != 0; i++)
    if (str[i] == ' ')
       break;

或者您可以使用std::find

【讨论】:

    【解决方案3】:

    C++ 解决方案:

    #include <iostream>       // std::cout
    #include <string>         // std::string
    
    int main() {
        std::string str1("123 56");
        std::string str2 (" ");
    
        std::size_t found = str1.find(str2);
        if (found!=std::string::npos)
            std::cout << "first ' ' found at: " << found << '\n';
    }
    

    输出:

    first ' ' found at: 3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-03
      • 2017-05-22
      • 2014-07-10
      相关资源
      最近更新 更多