0

文字配列から文字グループを検索する 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]

4

2 に答える 2

3
  1. 入力をコピーして小文字に変換します ( std::string を小文字に変換する方法を参照してください) 。
  2. 通常の検索を実行します ( http://www.cplusplus.com/reference/string/string/find/ )
于 2013-07-19T14:09:02.093 に答える
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できます。おかしなキャストも回避できますが、クラス自体は、ファセットへのポインタを保持するために余分な荷物を運ぶ必要があります。 、そしてそれを存続させるために。)

于 2013-07-19T14:41:53.163 に答える