私はキーを要求すると、負の(-7998482842)または正(898395893)の数字が返されますが、文字列が戻されます。私は、問題はここにあると思いファイルからデータを読み込んでマップに挿入するC++
string string
[email protected] color1
[email protected] color2
:
ファイル形式table[name] = std::string(color);
誰かが助けてくださいことはできますか?
class table_data
{
public:
std::map<std::string, std::string> table;
bool read(std::string &fname)
{
std::ifstream ifs (fname, std::ifstream::in);
if(ifs.fail())
{
printf("Cant open\n");
return false;
}
return read(ifs);
}
bool read(std::istream &is)
{
for (std::string line; std::getline(is, line);)
{
char *name = strtok(const_cast<char*>(line.c_str()), " \r");
if(name != nullptr)
{
char *color = strtok(nullptr, " ");
if(color != nullptr)
{
table[name] = std::string(color);
}
else
{
printf("No data %s\n", line.c_str());
return false;
}
}
else
{
printf("No name\n");
return false;
}
}
return true;
}
std::string getcolor(std::string name)
{
std::map<std::string, std::string>::iterator it;
it = table.find(name);
if (it != table.end())
{
return it->second;
}
}
};
'のchar *色=はstrtok(nullptr、"「); '? –
'const_cast'の' std :: string'は未定義の動作です。代わりに他の方法を使用してください。この質問を参照してください:http://stackoverflow.com/questions/289347/using-strtok-with-a-stdstring – pergy
はい、どのように文字列にcharを入れるのですか? – Rabbit