下面的代码是从字符串中搜索名称,用户输入了7个名称然后程序要求用户输入名称,程序然后从数组执行搜索并输出名称的位置。程序停止询问用户是否用户按n否则它将继续要求用户搜索。 这个程序工作正常但只找到完全匹配。该程序应该忽略大写字符和小字符,但它不会忽略。例如,数组包含名称“JAMES”,我搜索詹姆斯,它不会给我的位置。这是我的程序,请帮助如何做到这一点。谢谢
#include <iostream>
#include <string>
using namespace std;
int main(){
string str[7];
string search;
for(int i=0; i<7; i++){
cin>>str[i];
}
//searching the string
cout<<endl;
char option;
do{
cout<<"Enter the name to search"<<endl;
cin>>search;
for(int i=0; i<7; i++){
if(str[i]==search){
cout<<search<<" has been found in the "<<i+1<<" Position"<<endl;
}
}
cout<<"Do you want to search another name, press y to continue or n to just quit"<<endl;
cin>>option;
}while(option!='n');
return 0;
}
答案 0 :(得分:0)
你还没有添加逻辑但忽略Case(大写或小写),为此,你需要将输入字符串以及存储的字符串转换为所有大写或全部小写,然后进行比较。
一个可以将字符串转换为大写的简单片段是:
for(int i = 0; i < strlen(s); i++)
s[i] = toupper(s[i]);
(更好的方法是在输入时将字符串转换为大写,这样当用户输入要搜索的值时,您只需要将此值转换为大写)
答案 1 :(得分:0)
使用自己的函数进行不区分大小写的比较字符串:
// You must include <cctype> to use std::toupper
bool ci_compare(std::string const & s1, std::string const & s2)
{
// If both strings have different lengths, then they
// are different. End of the story.
if (s1.size() != s2.size()) return false;
// Asserting that two strings are case-insensitively equal
// is the same as asserting that the result of converting
// both strings to uppercase are (case-sensitively) equal.
auto i1 = s.begin(), i2 = s2.begin(), e = s1.end();
while (i1 != e)
if (std::toupper(*i1++) != std::toupper(*i2++))
return false;
return true;
}
然后,在您发布的代码段中,替换
if (str[i] == search) {
与
if (ci_compare(str[i], search)) {