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 行,但都没有成功

第 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

你有点不一致。您也使用char*和使用std::strings,std::string其好处是拥有size您在 for 循环中使用的方法。std::string没有std::string::size_t,要么是size_t要么std::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 回答