【问题标题】:use string.at() to find a space in a string c++使用 string.at() 在字符串 C++ 中查找空格
【发布时间】:2015-02-19 08:31:04
【问题描述】:

我试图在字符串中的某个位置找到一个空格,但我遇到的麻烦比我预期的要多。

我尝试了很多方法,但都没有奏效,一个更有意义的是

if (isspace(string.at(3)))
{
    spacePresent = true;
}

假设我的字符串是 123 56,我希望它返回 true,如果它类似于 123456,则返回 false。我已经做了好几个小时了,现在我要睡觉了,希望我能在睡个好觉后解决它......

我上面尝试的方式给了我一个超出范围的错误。

在抛出 'std::out_of_range' 的实例后调用终止 what(): basic_string::at

【问题讨论】:

  • 晚安......对了,你有什么问题?
  • 出现错误时字符串的长度是多少?你确定吗?
  • 你的意思是something like this?尽管我猜想string,如果有的话,这是一个命名不佳的变量,它不符合您的想法。请发布您的完整代码。

标签: c++ string find whitespace space


【解决方案1】:
if (string.size()>=4 && isspace(string.at(3)))

那个例外是指罐头上所说的。 3 超出了字符串的范围。

NB 1:isspace(.) 标识各种空格字符(如制表符等)。我认为这就是您想要的,而不仅仅是普通的 ==' '

NB 2:string 不是一个很好的标识符选择,因为它也是类的名称。可能会导致您(但不是编译器)混淆。

【讨论】:

  • 好吧,命名冲突只会造成混乱,而且可能是一个奇怪的错误。但是命名空间应该处理编译错误。
【解决方案2】:

所以如果我知道 std::cin >> 输入,我之前尝试过的所有方法都可能会奏效;不适用于空格。

关于字符串名称,这是我编辑器中的其他内容,这是我第一次在这里发帖,所以我改变了它,认为它会更简单,但是哦……

我现在正在使用它来获取我的数字字符串输入,它与 WhozCraig 在 cmets 中发布的内容很好地配合:

std::getline(std::cin, x);

【讨论】:

  • 你甚至没有提到你是如何捕获字符串的。发布 MCVE 的一个很好的教训
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 2017-07-26
相关资源
最近更新 更多