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

问题描述 投票:0回答:2

我正在尝试完成一个从文件中读取并计算GPA的程序。基本上有16组数据,每组有3种类型 - 名称,等级和加分。示例文字:

兔八哥 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;
     }  
}
c++
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+

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

试试这个...

© www.soinside.com 2019 - 2024. All rights reserved.