C ++:在字符数组中查找匹配的字符

时间:2013-07-19 14:05:11

标签: c++ arrays string search

如何实现c ++脚本从字符数组中搜索一组字符。搜索字符不区分大小写。例如,我键入“aBc”,字符数组有“abcdef”,它是点击并显示找到的。

这是我的剧本,不知道出了什么问题。

#include <iostream>
#include <cstdlib>
#include <cstring>

using namespace std;

int main()
{
  char charArr1[]="abcdefghi";
  char inputArr[20];

  cin>>inputArr;
  charArr1.find("abc");
}

我收到了这个错误。 请求'charArr1'中的成员'find',这是非类型'char [10]

2 个答案:

答案 0 :(得分:3)

  1. 复制您的输入并将其转换为小写(请参阅How to convert std::string to lower case?
  2. 执行常规搜索(http://www.cplusplus.com/reference/string/string/find/

答案 1 :(得分:1)

最简单的解决方案是将输入转换为小写,和 使用std::search

struct ToLower
{
    bool operator()( char ch ) const
    {
        return ::tolower( static_cast<unsigned char>( ch ) );
    }
};

std::string reference( "abcdefghi" );
std::string toSearch;
std::cin >> toSearch;
std::transform( toSearch.begin(), toSearch.end(), toSearch.begin(), ToLower() );
std::string::iterator results
    = std::search( reference.begin(), reference.end(),
                   toSearch.begin(), toSearch.end() );
if ( results != reference.end() ) {
    //  found
} else {
    //  not found
}

ToLower类应该在您的工具包中;如果你做的话 文本处理,你会经常使用它。你会注意到这种类型 转换;这是必要的,以避免因未定义的行为 ::tolower的某种特殊界面。 (取决于 您执行的文本处理类型,您可能希望将其更改为 使用ctype中的std::locale构面。你也避免了 有趣的演员,但班级本身将不得不携带一些过剩 bagage保持指向小平面的指针,并使其保持活力。)