c++ - 字符串到两个数字
问题描述
我需要帮助创建一个函数,该函数接受一个字符串,该字符串包含由“”(空格)分隔的两个数字。然后将这两个数字传递给另一个函数以从中创建分数格式。
我尝试了一个 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。
解决方案
您在 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;
否则,如果您愿意,可以使用 C sscanf onstring::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;
使您的生活复杂化是没有用的,并且允许使用额外的空格/标签来管理案例。
但我鼓励你总是检查你是否得到了一个结果,而不是假设/希望你得到一个
推荐阅读
- php - 如何检查浮点数的输入是否最大为 2 位精度?
- c# - 命令超时后终止查询
- java - 无法转换 java Date 默认格式
- python-3.x - 使用嵌套字典 Python 的自定义类
- c# - 复制的 DateTime 值不相等
- swift - (条件)是什么?val1 : 调用 val2 语句?
- javascript - 为什么 for-of 不跳过稀疏数组的空槽?[JavaScript]
- c# - c# 运行cmd并观察结果在cmd中
- node.js - ESP8266 / Arduino modbus RTU Buffer 数据转换
- c++ - [] 和 .data() 的 sizeof() 结果不同