string.at if语句不返回任何内容

时间:2019-01-11 16:29:40

标签: c++

如果末尾没有一个数字,我正在尝试在输入的字符串中添加一个句点。

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

int main() {
    cout<<"Type something\n";
    string input;
    getline(cin, input);
    string period = ".";
    if (input.at(input.length()) == period.at(1)) {
    cout<<"you entered"<<input;
    } else {
    cout<<"you entered"<<input<<".";
    }
}

原本应该添加一个句点,但最终什么也没打印。有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:4)

您要求它在位置1处的字符,它是 second 字符,因为索引从零开始。但是只有一个字符!

==的另一端,您遇到相同的问题。

这两种情况都会触发an exception

无论如何,您不需要字符串进行比较。我会这样做:

const char delimiter = '.';
if (!input.empty() && input.back() == delimiter)
   ...

或者,坦率地说,直接进行比较:

if (!input.empty() && input.back() == '.')
   ...

这很不言自明。