【问题标题】:checking for spaces with c++用 C++ 检查空格
【发布时间】:2017-10-11 16:53:21
【问题描述】:

所以我在网站上四处寻找有类似问题的人,但没有出现任何问题,这真的让我感到困惑。

#include <iostream>
#include <string>
using namespace std;

string reverse(string s)
{
    int start = 0;
    for(int i = 0; i < s.length(); i++)
    {
        if(s[i]==' '){
            string new_word = s.substr(start,i);
            cout << new_word << endl;
            start = i+1;
         }   
    }
    return "hi";
}



int main(){
    cout << reverse("Hey there my name is am");
    return 0;
}

当我运行上面的代码时,这就是我得到的输出。

Hey
there my 
my name is
name is am
is am
hi

如您所见,if 条件似乎并没有在每个空间都中断。我也尝试过 isspace(s[i]) 并产生与上述相同的结果。我一生都无法弄清楚为什么 if 条件在某些空白处而不是其他空白处被跳过。有没有人遇到过类似的问题?

【问题讨论】:

  • 你真的必须努力让你的缩进对齐。保持代码整洁有序非常重要,尤其是在寻求帮助时。
  • 现在是使用调试器单步调试代码并发现异常行为的好时机。
  • 也许documentation on substr 会有所帮助
  • @Kevin 确实有帮助,我最初误读了它。谢谢!对于那些想知道问题不在于 isspace() 或我的 if 但我在错误的位置剪切子字符串的人。
  • 提示:仔细阅读substr,注意第二个参数应该是什么。

标签: c++ string stl


【解决方案1】:

看看string::substr的引用。它明确指出len字符数 包含在子字符串中。在您的代码中,您传递了' ' 的索引,这是完全错误的,因为它不对应于len。不要使用s.substr(start,i),只需使用s.substr(start,i - start + 1)。这应该可以解决问题。

【讨论】:

    猜你喜欢
    • 2013-02-24
    • 1970-01-01
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2014-03-02
    • 1970-01-01
    • 2013-03-13
    • 2015-12-27
    相关资源
    最近更新 更多