2

コードは、2つの文字列が同じパターンを持っているかどうかを判断しようとします。

#include <iostream>
#include <vector>
#include <string>
#include <map>
#include <sstream>


bool findMatch(char * s1, char * s2){
    std::map<char, std::string> words;
    std::istringstream iss(s1);
    std::string word;
    //for (std::string::size_t i = 0; i < s2.size(); ++i)      //line 1
    //for (int i = 0; i < s2.size(); ++i)                      //line 2
    {
        if (!(iss >> word))
            return false; 
        std::string& mapping = words[s2[i]];
        if (mapping == "")
            mapping = word; 
        else if (mapping != word)
            return false; 
    }
    return !(iss >> word); 
}

int main(int argc, char * argv[]){
    bool b = findMatch("red blue blue red red yellow", "abbaac");
    std::cout << b << std::endl;
    return 0;
}

質問: 1行目と2行目の2回試行しましたが、どちらも機能しませんでした

1行目、エラー:クラス「...」にはメンバー「size_t」がありません

2行目:エラー:char*s2式はクラスタイプである必要があります

何か案は?

4

3 に答える 3

3

少なくともいくつかの問題がありsize_t、文字列の一部ではなく、s2はそうではないstd::stringので、次のようなものを使用する必要がありますstrlen

for (size_t i = 0; i < strlen(s2); ++i)

つまり、含める必要がありますcstring

#include <cstring>     

一貫性を保つためにstd::string、の代わりに使用する方がおそらく理にかなっていますchar *

于 2013-03-07T01:44:51.060 に答える
3

あなたは少し一貫性がありません。sも使用してchar*使用します。これには、forループで使用しているメソッドがあるという利点があります。はありません、またはのいずれかです。std::stringstd::stringsizestd::stringstd::string::size_tsize_tstd::string::size_type

char*パラメータをに置き換えますconst std::string&。そうすれば、意図したとおりに機能します。

于 2013-03-07T01:44:56.963 に答える
-1

1行目を次のように変更してみてください

for (size_t i = 0; i < strlen(s2); ++i)
于 2013-03-07T01:40:18.677 に答える