字符串到两个数字

时间:2019-03-29 19:33:08

标签: c++ string int

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

我尝试过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。

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);