在不使用strcmpi()的情况下使strcmp()不区分大小写(C ++)

时间:2017-10-20 16:22:19

标签: c++ string algorithm performance strcmp

我正在使用一个程序来搜索文件中的字符串(在本例中是一个名称)。我希望程序不区分大小写,但strcmp是。我想将文件和用户输入转换为小写。但那效率低下。还有其他建议可以解决这个问题吗? 这只是获得程序概念的一小部分代码

    cout << "\n Enter the Guests name: ";
    cin.getline(look_4_person, 256);  //name that is being looked up
    cout << "\n Searching... \n";
    while(!name_file.eof())
    {
        ++place;
        name_file.getline(person,255);
        if(strcmpi (person,look_4_person)==0)
        {
        found=place;   
        }
    }
    cout << "\n" << look_4_person << " is number " << found << 
            " on the list \n";

2 个答案:

答案 0 :(得分:2)

  

正在考虑将bot文件和用户输入转换为小写。但那效率低下。还有其他任何可以克服这个问题的建议吗?

重新思考这个。

这是处理区分大小写的典型方法。我的意思是将两个字符串(文件名和用户输入)转换为小写。

这需要O(n),其中n = max(filename.size, userInput.size)

至于性能,文件名和用户输入通常是微小数据,因此我很确定将它们转换为小写,肯定瓶颈你的算法。

答案 1 :(得分:0)

while(!name_file.eof()){
        ++place;
        name_file.getline(person,256);
        for(i=0; i<200; i++)
      {
        person[i] = tolower(person[i]);  //changes to lower case to compare
      }
        if(strcmp (person,look_4_person)==0){   //compares 
        found=place;                            

        }