我需要帮助来创建一个函数,该函数接受包含两个用“”(空格)分隔的数字的字符串。然后,将这两个数字传递给另一个函数以从中创建分数格式。
我尝试过if语句来定位空格,然后创建两个分别包含空格字符前后的值的子字符串。
Fraction::Fraction(string frac)
{
int t, b;
for (int i = 0; i < frac.size(); i++)
{
if (frac.substr(i, 1)==" ")
{
t = stoi(frac.substr(0,i-1)); //number before space
b = stoi(frac.substr(i + 1)); //number after space
break;
}
}
this->setFraction(t, b);
}
例如,字符串s =“ 1 2”转换为t = 1和b = 2。
答案 0 :(得分:2)
您使用的是C ++,只需使用 std :: istringstream :
std::string s("1 2");
std::istringstream ss(s);
int t, b;
if (ss >> t >> b)
std::cout << t << '/' << b << std::endl;
else
std::cerr << "invalid form " << s << std::endl;
否则,您可以在string::c_str()
上使用C sscanf
std::string s("1 2");
int t, b;
if (sscanf(s.c_str(), "%d %d", &t, &b) == 2)
std::cout << t << '/' << b << std::endl;
else
std::cerr << "invalid form " << s << std::endl;
这使您的生活复杂化是没有用的,它允许使用其他空格/制表符来管理案件。
但是我鼓励您始终检查您是否获得了结果,而不是假设/希望您得到了
答案 1 :(得分:-1)
我的解决方案:
int t, b;
for (std::string::size_type i = 0; i < frac.length(); ++i)
{
if (frac[i] == ' ')
{
t = stoi(frac.substr(0, i));
b = stoi(frac.substr(i+1));
break;
}
}
this->setFraction(t, b);