Ошибка: выражение должно иметь тип класса для size ()

Код пытается выяснить, имеют ли две строки одинаковый шаблон.

#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 должно иметь тип класса

Есть идеи?

2

Решение

Вы немного противоречивы. Ты используешь char* и использовать std::stringа также, std::string имеет то преимущество, что size метод, который вы используете в цикле for. std::string не имеет std::string::size_tлибо size_t или же std::string::size_type,

Я бы заменил ваш char* параметры для const std::string&Таким образом, он работает так, как вы хотели.

3

Другие решения

Есть как минимум несколько проблем, size_t не является частью строки и s2 не является std::string так что вам нужно использовать что-то вроде strlen:

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

что означает, что вам нужно включить cstring

#include <cstring>

и для согласованности, вероятно, имеет больше смысла использовать std::string на месте char *,

3

Попробуйте изменить строку 1 на

for (size_t i = 0; i < strlen(s2); ++i)
-1
По вопросам рекламы [email protected]