嗨伙计们,我试图将此列表与文本文件分开
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自己获取数字,但我不知道如何向我的程序表明我开始一个新学生
感谢帮助人员!
答案 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;
}