**请不要直接回答或代码示例,这是我需要学习的功课。我正在寻找有关我需要开发的算法的帮助。
我似乎在为我的班级工作的一部分提出解决方案时遇到逻辑错误,该程序涉及多个文件,但这是唯一相关的部分:
我有一个文件PlayerStats,用于保存篮球运动员的统计数据:
我最初的反应是创建一个while循环并将它们读入一个包含这些值的临时结构,然后创建一个合并函数,将temp结构的值与inital数组记录合并,这很简单吗?
struct Baller
{
//other information on baller
int rebounds;
int assists;
int uniform;
int points;
void merge(Baller tmp); //merge the data with the array of records
}
//in my read function..
Baller tmp;
int j = 0;
inFile << tmp.uniform << tmp.assists << tmp.points << tmp.rebounds
while(inFile){
ArrayRecords[j].merge(tmp);
j++;
//read in from infile again
}
捕获: 该文件可以在标识符之间具有任意数量的空格,并且信息可以是任何顺序(省略统一编号,始终是第一个)。 e.g。
PlayerStats可能是
11 p3 a12 r5 //uniform 11, 3 points 12 assists 5 rebounds
//other info
OR
11 p 3 r 5 a 12 //same exact values
似乎无法想到一个算法以正确的顺序从文件中获取这些值,我正在考虑以下几点:
inFile << tmp.uniform; //uniform is ALWAYS first
getline(inFile,str); //get the remaining line
int i = 0;
while(str[i] == " ") //keep going until i find something that isnt space
i++;
if(str[i] == 'p') //heres where i get stuck, how do i find that number now?
else if(str[i] == 'a')
eles if(str[i] = 'r'
答案 0 :(得分:1)
做类似的事情:
int readNumber () {
while isdigit (nextchar) -> collect in numberstring or directly build number
return that number;
}
lineEater () {
Read line
skip over spaces
uniform=readNumber ();
haveNum=false;
haveWhat=false;
Loop until eol {
skip over spaces
if (isdigit)
number=readNumber ();
skip over spaces
haveNum=true;
else
char=nextChar;
haveWhat=true;
if (haveChar and haveNum) {
switch (char) {
case 'p' : points=number; break;
...
}
haveNum=false;
haveWhat=false;
}
}
或者,如果你更有野心,请为你的输入写一个语法并使用lex / yacc。
答案 1 :(得分:1)
如果您只打算检查一个字母,则可以使用switch
语句代替if / else
,这样可以更方便地阅读。
你知道那个数字从哪里开始,(提示:str[i+1]
),所以根据str[]
的类型,你可以使用atoi
,如果它是一个char数组,或std::stringstream
如果是std::string
。
我很想给你一些代码,但你也没说。如果你确实想要一些,请告诉我,我会用一些代码编辑答案。
不要使用“合并”功能,而是尝试使用std::vector
,这样您就可以push_back
结构,而不是进行任何“合并”。此外,你的merge函数基本上是一个copy assignment operator,默认情况下由编译器创建(你不需要创建'merge'函数),你只需要使用=
来复制数据跨越。如果你想在'merge'函数中做一些特别的事情,那么你应该overload the copy assignment operator而不是'merge'函数。 Simples