【问题标题】:C++ reading in both an int and a string, possibly at the same timeC++ 可能同时读取 int 和字符串
【发布时间】:2014-01-14 04:27:02
【问题描述】:

这里对 C++ 相当陌生,但对编程并不陌生。我想知道是否有任何简单的方法来获取用户输入,例如“20 kg”,“20”是用户输入的任何内容,然后 kg/lb/etc 再次是用户输入的内容。 问题是,我需要在计算中使用输入的整数部分。 我想做的就是把它全部读成一个字符串,然后将 int 和 string 分成单独的变量。 (我必须在方程式中同时使用数字和测量类型) 任何帮助都会很棒。

我不是在寻找任何代码块,我只想解释我应该做什么,以及我可能需要使用的任何关键代码 sn-ps。 提前谢谢!

【问题讨论】:

  • 你的意思是后缀,不是吗?
  • @Robert kilo 是一个前缀。但是kilogram 紧随其后,所以我猜这是一个后缀。我不太确定。我在考虑 SI 前缀。也许unit 是一个更合适的名字。
  • 您的 C++ 实现是否提供正则表达式?读取单个字符串,然后将数字部分和单位部分捕获到两个变量中。

标签: c++ string int


【解决方案1】:

std::istream(特别是operator >>()s)可以轻松应对这种情况:

int weight;
std::string units;
std::cout << "Guess the weight of the cake: ";
if (std::cin >> weight >> units)
{
    std::cout << weight << units << "? Spot on!" << std::endl;
}
else
{
    std::cerr << "Expected a numeric weight and alphabetic units (e.g: 42 kg)."
              << std::endl;
}

【讨论】:

  • 我建议if (std::cin &gt;&gt; weight &gt;&gt; units) ...; else std::cerr &lt;&lt; "unable to input weight and units\n"; - 未经检查的输入对于初学者来说不是一个好习惯。
【解决方案2】:

使用pair&lt;int, string&gt;,将它们作为一个整体考虑,之后易于处理。

pair<int, string> val;
if (cin >> val.first >> val.second) 
    // read input sucessfully, e.g. val will be {20, "kg"}
else 
    cerr << "unable to input weight and units\n"

在此之后,无论何时要计算,只需使用val.first。并使用val.second 进行测量。

PS:如果您需要处理float 号码,可以使用pair&lt;float, string&gt;

【讨论】:

  • 我建议 if (std::cin &gt;&gt; val.first &gt;&gt; val.second) ...; else std::cerr &lt;&lt; "unable to input weight and units\n"; - 未经检查的输入对于初学者来说并不是一个好习惯。
【解决方案3】:

我的想法是让用户将整个内容作为字符串输入,然后您可以使用 substr 方法将字符串拆分为数字部分,然后是测量部分。 然后,您必须将数字部分转换为整数。

例子

string str = "20 lb";
string delimiter = " ";  //space
string number = str.substr(0, str.find(delimiter)); // this will get you the number
string measurement = str.substring(str.find(delimiter)+1, str.length()) //this will get you the               measurement
//convert the number string now

这应该适合你

【讨论】:

    【解决方案4】:

    首先,您必须确保输入在整数部分和公制部分之间有一个空格。那你应该

    1. 把它分成两部分

    2. 将第一部分转换为整数。

    如果你不想自己做这些繁琐的工作,你可以使用ssstream。下面是一个简短的示例。

    #include<string.h>
    #include<iostream>
    #include<sstream>
    
    using namespace std;
    
    int main()
    {
        string input("20 kg");
    
        istringstream stream(input);
    
        int n;
        string metric;
    
        stream >> n;
        stream >> metric;
    
        //do something you want here
    
        cout<<n<<" "<<metric;
    
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 2012-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-04
      • 1970-01-01
      相关资源
      最近更新 更多