拆分字符串并阅读每个部分

时间:2019-02-15 04:44:03

标签: c++

我正在尝试完成一个从文件读取并计算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;
     }  
}

2 个答案:

答案 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);
}

尝试一下...