C++ 可能同时读取 int 和字符串

Posted

技术标签:

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

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

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

【问题讨论】:

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

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

    把它分成两部分

    将第一部分转换为整数。

如果你不想自己做这些繁琐的工作,你可以使用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;

【讨论】:

以上是关于C++ 可能同时读取 int 和字符串的主要内容,如果未能解决你的问题,请参考以下文章

从字符串 C++ 中读取单词,同时忽略空格、数字和符号。

C++学习笔记——一个字符串分割和统计的工具(TextUtils)

C++ 线程安全 - 地图读取

简单的 C++ - 关于字符串和连接以及将 int 转换为字符串 [重复]

从 c++ 中用 cppyy 读取 char16_t* 字符串

有没有办法强制所有列成为字符串,同时从.csv文件读取数据到DataTable?