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

string.at if statement doesn't return anything

本文关键字:返回 任何内 语句 at if string      更新时间:2023-10-16

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

#include<iostream>
#include<string>
using namespace std;
int main() {
    cout<<"Type somethingn";
    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 的字符,这是第二个字符,因为索引从零开始。但只有一个角色!

您在==的另一边也有同样的问题.

这两种情况都会触发异常。

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

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

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

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

这已经不言自明了。