我有一个具有不同城市名称的字符串。格式如下:
string cities = "-Paris-Berlin-Cologne-"
还有另一个字符串,其中包含这些城市的一些投票结果。
string vote = "-31.2-42.5-40-"
我需要定义一个从用户输入ex:Berlin的函数 然后函数将在“字符串投票”中找到并更改投票结果
我尝试计算“ - ”分隔符,但我无法成功。
任何帮助都会表示赞赏。
谢谢。
答案 0 :(得分:0)
使用正则表达式搜索来查找连字符字符串中的位置,然后相应地更改这些位置之间的值是可接受的解决方案吗?
编辑 - 再想一想,你不需要使用正则表达式来复杂化,你可以只使用for循环来扫描字符串
答案 1 :(得分:0)
在分隔符处拆分两个字符串并将结果放在地图中
std::vector<std::string> split(std::string const& s, std::string const& sep);
std::vector<std::string> const c = split(cities, "-");
std::vector<std::string> const v = split(votes, "-");
// now put them all in a map
assert(c.size() == v.size());
std::map<std::string, float> city2vote;
for (std::vector<std::string>::size_type i=0; i != c.size(); ++i)
{
city2vote[c[i]] = atof(v[i]);
}
// update vote for Berlin
city2vote["Berlin"] = 42.0;
分割功能是向前发展的,但如果你可以使用库,Boost也提供了一个实现。为简单起见,我使用了atof。在现实生活中,弦流将是一个更好的选择。
答案 2 :(得分:0)
首先,我认为您应该将每个分隔的字符串从cities
映射到vote
。你可以这样做:
std::map<std::string, std:string> city_to_vote;
std::istringstream i1(cities), i2(vote);
for (std::string str1, str2; std::getline(i1, str1, '-') &&
std::getline(i2, str2, '-'); )
{
if (!str1.empty() && !str2.empty())
{
city_to_vote.emplace(std::make_pair(str1, str2));
}
}
然后,一旦您收到来自用户的字符串输入,请检查它是否在地图内,访问它映射到的值,并使用替换算法来扩充vote
字符串。