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。 提前谢谢!
【问题讨论】:
你的意思是后缀,不是吗? @Robertkilo
是一个前缀。但是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 >> weight >> units) ...; else std::cerr << "unable to input weight and units\n";
- 未经检查的输入对于初学者来说不是一个好习惯。【参考方案2】:
使用pair<int, string>
,将它们作为一个整体考虑,之后易于处理。
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<float, string>
。
【讨论】:
我建议if (std::cin >> val.first >> val.second) ...; else std::cerr << "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++学习笔记——一个字符串分割和统计的工具(TextUtils)
简单的 C++ - 关于字符串和连接以及将 int 转换为字符串 [重复]