文件输入,试图从字符串中提取Int(C ++)

时间:2014-08-28 11:47:06

标签: c++ string int stringstream

嗨伙计们,我试图将此列表与文本文件分开

15

Albert Einstein 52 67 63

Steve Abrew 90 86 90 93

David Nagasake 100 85 93 89

Mike Black 81 87 81 85

Andrew Van Den 90 82 95 87

Joanne Dong Nguyen 84 80 95 91

Chris Walljasper 86 100 96 89

Fred Albert 70 68

Dennis Dudley 74 79 77 81

Leo Rice 95

Fred Flinstone 73 81 78 74

Frances Dupre 82 76 79

Dave Light 89 76 91 83

Hua Tran Du 91 81 87 94

Sarah Trapp 83 98

全名,阿尔伯特爱因斯坦,然后他们跟随int作为数组。

但是我不确定该怎么做。

这是我到目前为止所做的,但它并没有为我点击。

void Student::getData(Student * stdPtr, int len)
{
    int tempt;
    int sucker = 0;

    ifstream fin;
    fin.open("students.dat");
    fin >> tempt;

    while(!fin.eof())
    {
        string temp;
        getline(fin, temp,'\n');

        stringstream ss;
        ss << temp;
        ss >> sucker;

        cout << temp << " "<<  sucker <<   endl;
        sucker = 0;
    }
    fin.close();
}

我觉得我有点亲近,实际上能够通过stringstream自己获取数字,但我不知道如何向我的程序表明我开始一个新学生

感谢帮助人员!

3 个答案:

答案 0 :(得分:2)

这是一个简单的算法(懒得编写完整的代码:P)

1)继续使用fin >> temp_str阅读,temp_str为std::string

2)使用std::stoi(temp_str)将字符串转换为整数。

如果它不是整数且是字符串,则它将通过无效异常。使用此例外:

2A)最后一个值是int:它是新对象的名称数据。

2B)最后一个值不是int:它是名称的下一部分,你应该追加到最后一个字符串。

3)如果没有抛出异常,则它是一个数字,保存在当前对象中。

4)继续阅读文件直到结束。

答案 1 :(得分:1)

getline

之后尝试这样的事情
stringstream ss(temp);
string name;
string surname;
ss >> name >> surname;
int i;
while (ss >> i) {
  cout << i << ' ';
}
//follows a fast fix to manage names with three words
if (!ss.eof()) { //we tried to extract an int but there was another string
                 //so it failed and didn't reach eof
  ss.clear();    //clear the error bit set trying to extract a string to an int
  string thirdname;
  ss >> thirdname;
  while (ss >> i) {
    cout << i << ' ';
  }
}

...或查看此示例:https://ideone.com/OWLHjO

答案 2 :(得分:0)

我只是给你一个如何将整数和字符串从一行中分离出来的技巧。因此,您可以实现自己的:

#include <iostream>
#include <stdio.h>
#include <bits/stdc++.h>


using namespace std;


int main()
{
    string in;
    int i,j,k,n;

    scanf("%d",&n);

    getchar();

    for(j=0 ;j<n ;j++){



        getline(cin,in);

        stringstream ss(in);
        string tem;

        vector<string>vstring;
        vector<int> vint;

        while(ss>>tem){

            if(isalpha(tem[0]))
                vstring.push_back(tem);
            else{

                k  = atoi(tem.c_str());
                vint.push_back(k);
            }

        }

        cout<<"String are : ";

        for(i=0 ;i<vstring.size() ;i++)
            cout<<vstring[i]<<" ";

        cout<<"\nIntegers are : ";

         for(i=0 ;i<vint.size() ;i++)
            cout<<vint[i]<<" ";

            cout<<endl;

    }



    return 0;
}