0

我有一个输入文件,其中包含坐标模式下的一些数据例如 (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++;
     }
}
4

4 回答 4

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
于 2013-09-28T01:44:22.520 回答
1

jrd1 的答案非常好,但如果您更喜欢 C 标准库 (cstdlib) 中已经有用于将字符转换为整数(和返回)的函数。你会在找atoi。

http://en.cppreference.com/w/cpp/string/byte/atoi

于 2013-09-28T02:02:12.853 回答
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;
}
于 2013-09-28T01:51:12.780 回答
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;

}

这里查看更多详细信息。

注意:将其用于字符数组和字符串时要小心.. :)

于 2013-09-28T02:27:05.697 回答