字符串不区分大小写

时间:2017-10-28 13:35:10

标签: c++ arrays string

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

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

现在,这是问题所在。如果用户键入“hello”,程序将回复,但如果他使用的单词是“Hello”,则程序不会在字符串数组中识别它。 我如何“否定”这些字符串的案例敏感性?

4 个答案:

答案 0 :(得分:2)

使用std::transformstd::tolower将所有字​​符串字符转换为小写:

import BeyovaJSON

struct Customer: Codable {
  let id: String
  let email: String
  let metadata: JToken
}

//create a customer instance

customer.metadata = ["link_id": "linked-id","buy_count": 4]

let encoder = JSONEncoder()
encoder.outputFormatting = .prettyPrinted 
print(String(bytes: try! encoder.encode(customer), encoding: .utf8)!)

相应地使用。请注意,如果您有多字节字符,则会失败。

答案 1 :(得分:1)

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

#include <algorithm>
#include <string> 

std::string data = "Abc"; 
std::transform(data.begin(), data.end(), data.begin(), ::tolower);

答案 2 :(得分:0)

克服此问题的一种方法是将用户提供的所有输入转换为小写,假设这对您程序的内部结构无关紧要。您可以使用语言环境库中的tolower来实现此目的。

点击此处查看示例: http://www.cplusplus.com/reference/locale/tolower/

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

答案 3 :(得分:0)

如果用户输入的数据与您在字符串中存储的字词不匹配,肯定会导致一些意外情况。 在这种情况下,您可以将所有可能的用户输入提供给数组(这非常繁琐),或者您可以使用用户提供的每个字母表转换为较低的大写字母。

示例:

#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"
}

大写单词用toupper替换tolower