搜索字符串(仅查找完全匹配不会忽略大写或小字符

时间:2013-12-14 07:14:11

标签: c++ arrays string character

下面的代码是从字符串中搜索名称,用户输入了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;
}

2 个答案:

答案 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)) {