首页 > 解决方案 > 字符串到两个数字

问题描述

我需要帮助创建一个函数,该函数接受一个字符串,该字符串包含由“”(空格)分隔的两个数字。然后将这两个数字传递给另一个函数以从中创建分数格式。

我尝试了一个 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++stringint

解决方案


您在 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; 

使您的生活复杂化是没有用的,并且允许使用额外的空格/标签来管理案例。

但我鼓励你总是检查你是否得到了一个结果,而不是假设/希望你得到一个


推荐阅读