C++ 字符串到两个数字

C++ 字符串到两个数字,c++,string,int,C++,String,Int,我需要帮助创建一个函数,该函数接受一个字符串,该字符串包含由“”分隔的两个数字(空格)。然后将这两个数字传递给另一个函数以创建分数格式 我尝试使用if语句定位空格,然后创建两个子字符串,分别包含空格字符前后的值 Fraction::Fraction(string frac) { int t, b; for (int i = 0; i < frac.size(); i++) { if (frac.subs

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

我尝试使用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);
    }
分数::分数(字符串分数)
{
int t,b;
对于(int i=0;i设定分数(t,b);
}

例如,字符串s=“1 2”转换成t=1,b=2。

< p>你在C++中,只使用STD:: 让你的生活复杂化是没有用的,这样可以用额外的空格/标签来管理案例

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

你在C++中,只使用STD:: 让你的生活复杂化是没有用的,这样可以用额外的空格/标签来管理案例


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

没有必要这样做
substr(I,1)
dance。那太贵了。只需使用
frac[i]
访问
frac
中的第i个字符。或者使用
frac.find(“”)
而不是编写自己的循环。这可以用更简单的方法来完成。注意,如果字符串中没有空格,
t
b
将保持未初始化状态。@PeteBecker,你的意思是;-)@布鲁诺-是的。谢谢。没有必要跳那种
substr(i,1)
dance。那太贵了。只需使用
frac[i]
访问
frac
中的第i个字符。或者使用
frac.find(“”)
而不是编写自己的循环。这可以用更简单的方法来完成。注意,如果字符串中没有空格,
t
b
将保持未初始化状态。@PeteBecker,你的意思是;-)@布鲁诺-是的。谢谢。我用C++的方式,改变了一些线来适应我的问题,它是有效的。D谢谢你!我用C++的方式,改变了一些线,以适应我的问题,它的工作。D谢谢你!
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; 
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;