字符串到两个数字

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 更简单地完成。 请注意,如果您的字符串中没有空格,tb 将保持未初始化状态。 @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()

上使用 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; 

让你的生活复杂化是没有用的,这允许使用额外的空格/制表符来管理案例。

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

【讨论】:

我使用了 C++ 方式并更改了一些行以适应我的问题并且它可以工作。 :D 谢谢!

以上是关于字符串到两个数字的主要内容,如果未能解决你的问题,请参考以下文章

如何在字符串后添加到println中的数字

正则表达式捕获两个数字之间的第一个字符串

C# - 寻找一种简单的方法来解析两个不同表示之间的字符串值(数字和英语)

mongoose 在 express 中使用 _id 链接两个集合,并将 id 作为数字或字符串插入

如何从字符串中读取数字到变量

将字符串数字格式化为双变量,小数点后有两个数字