代码试图弄清楚两个字符串是否具有相同的模式。
#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表达式必须具有类类型
有什么想法吗?
答案 0 :(得分:3)
至少存在一些问题,size_t
不是字符串的一部分而s2不是std::string
所以你需要使用像strlen
这样的东西:
for (size_t i = 0; i < strlen(s2); ++i)
表示您需要加入cstring
#include <cstring>
为了保持一致,使用std::string
代替char *
可能更有意义。
答案 1 :(得分:3)
你有点不一致。您使用char*
并使用std::string
,std::string
也可以使用您在for循环中使用的size
方法。 std::string
没有std::string::size_t
,只有size_t
或std::string::size_type
。
我会将您的char*
参数替换为const std::string&
,这样就可以按预期工作。
答案 2 :(得分:-1)
尝试将第1行更改为
for (size_t i = 0; i < strlen(s2); ++i)