2017-03-17 202 views
-3

我正在从文件(名称颜色)中读取数据,并将其插入到表中,并且当名称匹配时,返回正确的颜色。如何在C++函数中返回字符串

如何在功能

class call_color 
{ 
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] = color; 
      } 
      else 
      { 
       printf("No color %s\n", line.c_str()); 
       return false; 
      } 
     } 
     else 
     { 
      printf("No Name\n"); 
      return false; 
     } 
    } 

    return true; 
} 
std::string get_color(std::string name) 
{ 
    std::string color; 
    std::map<std::string, std::string>::iterator it; 
    it = table.find(name); 
    if (it != table.end()) 
    { 
    color = it->second; 
    } 

    return color; 
} 
}; 

它返回一个巨大的负值(-772802864)或任何名称巨大正值返回一个字符串。但我期望得到一个字符串,如:scdscsdcs

+2

而你的问题是.....? – EdChum

+1

'0'不是有效的字符串... –

+0

抛出异常而不是返回0? –

回答

1

,如果你想返回一个空字符串,你应该在函数的末尾添加

return std::string(); 

另请注意,您的else子句包含错误的返回类型。 0不能转换为有效的std :: string。

0

这可能有帮助。

std::string get_color(std::string name) 
{ 
    std::string color; 
    std::map<std::string, std::string>::iterator it; 
    it = table.find(name); 
    if (it != table.end()) 
    { 
     color = it->second; 
    } 
    else if (name == "Terminate") 
    { 
     color = ''; 
    } 
    return color; 
} 
+3

您是否尝试编译自己的建议代码? ''''代表什么样的字符? –

0

没有与

table[name] = color; 

地图table预计的std :: string对象都为键和值的一个问题,但两者namecolor是字符*。你应该这样做:

table[str(name)] = str(color); 
+0

表[std :: string(name)] = std :: string(mark); --- ???不起作用 – Rasp

+0

什么是标记?什么不行?有没有编译错误,或者你会得到奇怪的结果? – mwhite

+0

它与颜色相同。错字。 – Rasp