C++ string.at if语句不';我什么也不退

C++ string.at if语句不';我什么也不退,c++,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()) == pe

我试图在输入的字符串中添加句点,如果结尾没有句点

#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<<".";
    }
}
#包括
#包括
使用名称空间std;
int main(){

你可以要求它输入位置
1
的字符,这是第二个字符,因为索引从零开始。但是只有一个字符

您在
==
的另一侧也遇到了同样的问题

这两种情况都会触发

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

const char delimiter = '.';
if (!input.empty() && input.back() == delimiter)
   ...
或者,坦率地说,直接进行比较:

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

这是不言自明的。

您要求它输入位置
1
处的字符,这是第二个字符,因为索引从零开始。但是只有一个字符

您在
==
的另一侧也遇到了同样的问题

这两种情况都会触发

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

const char delimiter = '.';
if (!input.empty() && input.back() == delimiter)
   ...
或者,坦率地说,直接进行比较:

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

这是自解释的。

注意C++使用0个索引。在< /C>中,对<代码>的调用都有一个错误。你仍然应该得到一些打印的东西。例如,如果你的字符串有两个字符,它们有索引0和1。<代码>输入。AT(输入,长度())对于任何常见的C++容器,基本上都将超出界限。exception@LightnessRacesinOrbit你说得对。我想可能是因为
string[string.size()]他们改变了它
有效,但它们没有t@NathanOliver实际上,有同样的想法;必须检查C++是否使用0个索引。在中,对<代码>的调用都有一个错误。但是,仍然应该得到一些打印的东西。例如,如果字符串有两个字符,则它们具有索引0和1。<代码>输入。AT(输入。长度)()对于任何常见的C++容器,基本上都将超出界限。exception@LightnessRacesinOrbit你说得对。我想他们可能会更改它,因为
string[string.size()]
是有效的,但他们没有t@NathanOliver的确——有同样的想法;不得不检查