我正在尝试完成一个从文件读取并计算GPA的程序。基本上有16组数据,每组3种类型-姓名,成绩和加分。 示例文本:
Bugs Bunny
A B + B A- B B C + A B A-
100
我要解决的问题是在考成绩时弦的中间部分。我正在尝试阅读整个年级,然后阅读每个年级本身,例如“ A”然后“ B +”。基本上读为“ A”,值为3,将其添加到累加器中,然后移至下一个字母等级,直到到达换行符为止。
我考虑使用.get,但这是为了获取值。我不太了解如何处理字符串中的成绩。我知道使用循环。
struct infoTaker
{
string theirName;
string theirGrade;
double theirDonation;
int totalValue;
};
int main( )
{
double donation;
char letter;
ifstream file;
string fullName, actualGrade, substring;
file.open("F://Yes/thing.txt");
for ( int i = 0; i < 16; i ++){
getline( file, fullName ); // getting the names
infoTaker person;
person.theirName = fullName;
cout << person.theirName << endl; // end of names section
getline(file, actualGrade); // gettting the entire line
person.theirGrade = actualGrade; // the string of grades
cout << letter << endl; // Don't know what to do here
file >> donation;
file.ignore( 3 , '\n');
person.theirDonation = donation;
cout << person.theirGrade << endl;
cout << person.theirDonation << endl;
double convertDoodahs = person.theirDonation / 2.0;
}
}
答案 0 :(得分:0)
这是通过添加您在文件中读取的内容来完成此操作的一种方法,或者您也可以仅读取该行的某些成绩。我猜这会更有用,因为您以后可以检索名称和其他信息。
#include <iostream>
#include <string>
#include <sstream>
#include <fstream>
#include <vector>
int main(){
std::vector<std::string> vec;
std::string temp;
std::string grades;
std::ifstream input("test.txt");
//add them to vector, and access them later
while(getline(input, temp)) vec.push_back(temp);
//read the grades and seperate them
std::stringstream ss(vec[1]);
while(ss >> grades){
std::cout << grades << "\n";
}
}
示例txt文件
Bugs Bunny
A B C D+
100
输出
A
B
C
D+
答案 1 :(得分:0)
#include<iostream>
#include<string>
using namespace std;
int convert(char a,char b='\0')
{
int result = 0;
if(b == '\0')
{
switch(a)
{
case 'A':
result = 9;
break;
case 'B':
result = 9;
break;
case 'C':
result = 9;
break;
}
}else
{
switch(a)
{
case 'A':
if(b=='+')
result = 10;
else
{
result = 8;
}
break;
case 'B':
if(b=='+')
result = 10;
else
{
result = 8;
}
break;
case 'C':
if(b=='+')
result = 10;
else
{
result = 8;
}
break;
}
}
return result;
}
int getSum(string g)
{
int ans = 0;
int l = g.length();
for(int i=0;i<l;)
{
char a = g[i++],b='\0';
if(g[i]=='+'||g[i]=='-')
{
b = g[i++];
}
ans+=convert(a,b);
i++;
}
return ans;
}
int main()
{
string g = "A B+ B A- B B C+ A B A-";
int sum = getSum(g);
}
尝试一下...