分开绳子并阅读每个部分

Splitting a String and Reading Every Part

本文关键字:个部      更新时间:2023-10-16

我正在尝试完成一个从文件读取并计算GPA的程序。基本上,每组有16组数据集,其中包含3种类型 - 名称,成绩和额外的积分。示例文本:

bugs兔子
a b b a- b b c a b a-
100

我遇到的问题是在获得等级时在字符串的中部。我正在尝试阅读整个成绩,然后阅读每个等级本身,例如" A"," B "。基本上读取" a",值为3,将其添加到累加器中,然后移至下一个字母等级,直到达到Newline字符为止。

我想到了使用.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;
     }  
}

这是通过添加您在文件中读取的内容来完成此操作的一种方法,或者您也可以读取某些成绩。我猜这将更有用,因为然后您可以稍后检索名称和其他信息。

#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+
#include<iostream>
#include<string>
using namespace std;
int convert(char a,char b='')
{
    int result = 0;
    if(b == '')
    {
        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='';
        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);
}

尝试这个...