不区分大小写的字符串
Strings that aren't case-sensitive
所以,我想在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"
}
将单词替换为大写
相关文章:
- 编写宏函数来更改字符串的大小写?
- 如何执行不区分大小写的字符串比较?
- 对字符串向量进行排序,但不区分大小写
- 如何创建一个程序来标识最长的子字符串回文,而不考虑字母大小写
- 哈希字符串更改大小写
- 在字符串的 boost::unordered_set 中使用 Lambda 函数 - 不区分大小写
- 开关大小写语句中函数中的字符串输入会导致无限循环和绕过输入
- 比较字符串大小写不区分的简单方法是什么?
- 使用 std::string 返回开关大小写块中的字符串常量
- 如何使字符串中的每个字母不区分大小写
- 不区分大小写的字符串
- 是否有函数/WinAPI 可以判断一个字符串是否以不区分大小写的语言方式以另一个字符串开头?
- 使用 map<string,int> 在开关大小写语句中使用字符串
- 处理从 std::istream 中提取字符串的空字符串大小写
- C++大小写中的类型转换常量字符串
- C++,检查两个字符串的不区分大小写相等
- 在字符串向量中查找字符串,不区分大小写的c++
- 如何按大小写顺序排列字符串(而不是按字典顺序排列)
- 内置C++函数,使两个字符串的比较不区分大小写
- 用于转换字符串大小写的函数