不区分大小写的字符串

Strings that aren't case-sensitive

本文关键字:字符串 大小写 不区      更新时间:2023-10-16

所以,我想在C++创建一个聊天机器人,我声明了一个字符串数组。

string hello_message[5] = {"hello", "hi", "good morning", "good afternoon", "good evening"};    

现在,这就是问题所在。如果用户输入"hello",程序将回答,但如果他使用的单词是"Hello",则程序在字符串数组中无法识别它。如何"否定"这些字符串的大小写敏感性?

使用 std::

transform 和 std::tolower 将所有字符串字符转换为小写:

#include <iostream>
#include <string>
#include <algorithm>
int main() {
    std::cout << "Enter string: ";
    std::string s;
    std::getline(std::cin, s);
    std::transform(s.begin(), s.end(), s.begin(), ::tolower);
    std::cout << s;
}

相应地使用。请注意,如果您有多字节字符,此操作将失败。

您需要

将所有小写字符串存储在单词数组中然后您需要将输入转换为小写并在数组中进行检查。

#include <algorithm>
#include <string> 
std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);

解决此问题的一种方法是将用户提供的所有输入转换为小写,假设这对程序的内部无关紧要。您可以使用区域设置库中的 tolower 来实现此目的。

有关示例,请参阅此处:http://www.cplusplus.com/reference/locale/tolower/

如果要再次输出原始输入,也可以存储原始输入。

如果用户输入的数据与您存储在字符串中的单词不匹配,则肯定会导致一些计划外的情况。在这种情况下,您可以将每个可能的用户输入提供给数组(这很乏味),或者您可以使用用户给出的每个字母转换为小写,大写。

例:

#include <iostream>
#include <string>
#include <algorithm>
int main()
{
cout <<"say hi"<<endl;//if user enter "hi"
string str;
getline(std::cin, str);
transform(str.begin(), str.end(), str.begin(),::tolower);
cout << str;//it will be converted into "HI"
}

将单词替换为大写