字符串到两个数字
Posted
技术标签:
【中文标题】字符串到两个数字【英文标题】:String to two numbers 【发布时间】:2019-03-29 19:33:08 【问题描述】:我需要帮助创建一个函数,该函数接受一个字符串,该字符串包含两个由“”(空格)分隔的数字。然后将这两个数字传递给另一个函数以从中创建分数格式。
我尝试了一个 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。
【问题讨论】:
不需要substr(i, 1)
跳舞。这太贵了。只需使用frac[i]
访问frac
中的第i 个字符。或者使用frac.find(' ')
而不是自己编写循环。
这可以通过std::ostringstream
更简单地完成。
请注意,如果您的字符串中没有空格,t
和 b
将保持未初始化状态。
@PeteBecker 你的意思是std::istringstream ;-)
@bruno — 是的。谢谢。
【参考方案1】:
你在 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()
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;
让你的生活复杂化是没有用的,这允许使用额外的空格/制表符来管理案例。
但我鼓励你总是检查你是否得到了结果,而不是假设/希望你得到了一个
【讨论】:
我使用了 C++ 方式并更改了一些行以适应我的问题并且它可以工作。 :D 谢谢!以上是关于字符串到两个数字的主要内容,如果未能解决你的问题,请参考以下文章
C# - 寻找一种简单的方法来解析两个不同表示之间的字符串值(数字和英语)