我有一个输入文件,其中包含一些坐标模式的数据 例如(2,3,5)转换为第2列,第3行和第5级。我对使用getline(cin,string)获取数据后读取数字的方法感到好奇。我不知道数据点中有多少位数,所以我不能假设第一个字符长度为1.是否有任何库可以帮助更快地解决问题?
到目前为止,我的游戏计划尚未完成void findNum(string *s){
int i;
int beginning =0;
bool foundBegin=0;
int end=0;
bool foundEnd=0
while(*s){
if(isNum(s)){//function that returns true if its a digit
if(!foundBegin){
foundBegin=1;
beginning=i;
}
}
if(foundBegin==1){
end=i;
foundBegin=0;
}
i++;
}
}
答案 0 :(得分:1)
试试这个:
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <vector>
#include <string>
int main() {
std::vector <std::string> params;
std::string str;
std::cout << "Enter the parameter string: " << std::endl;
std::getline(cin, str);//use getline instead of cin here because you want to capture all the input which may or may not be whitespace delimited.
std::istringstream iss(str);
std::string temp;
while (std::getline(iss, temp, ',')) {
params.push_back(temp);
}
for (std::vector<std::string>::const_iterator it=params.begin(); it != params.end(); ++it) {
std::cout << *it << std::endl;
}
return 0;
}
唯一需要注意的是,参数必须是非空格分隔的。
示例输入字符串:
1,2,3
输出:
1
2
3
解析完这些参数后,您可以通过以下方法将它们从字符串转换为(示例)整数:
template <typename T>
T convertToType(const std::string &stringType) {
std::stringstream iss(stringType);
T rtn;
return iss >> rtn ? rtn : 0;
}
可以按如下方式使用:
int result = convertToType<int>("1");//which will assign result to a value of 1.
更新:
现在可以正确处理以空格分隔的输入(换行符除外),如下所示:
1 , 2, 3 , 4
哪个收益率:
1
2
3
4
答案 1 :(得分:1)
jrd1的答案非常好,但是如果您更喜欢在C标准库(cstdlib)中发生将字符转换为整数(和返回)的函数。你一直在寻找atoi。
答案 2 :(得分:0)
#include <sstream>
void findNums(const string &str, int &i, int &j, int &k)
{
std::stringstream ss(str);
char c;
ss >> c >> i >> c >> j >> c >> k;
}
答案 3 :(得分:0)
只需使用提取器运算符读取相应变量类型中的任何类型的值。
#incude<ifstream> // for reading from file
#include<iostream>
using namespace std;
int main()
{
int number;
ifstream fin ("YouFileName", std::ifstream::in);
fin >> number; // put next INT no matter how much digit it have in number
while(!fin.eof())
{
cout << number << endl;
fin >> number; // put next INT no matter how much digit it have in number and it will ignore all non-numeric characters between two numbers as well.
}
fin.close();
return 0;
}
查看here了解更多详情。
注意:将它用于字符数组和字符串时要小心..:)