因此,对于我的编程作业,我必须
处理输入文件中的数据并对其执行一些操作。
这是参数。
一名教师的班级不超过40名,每名学生参加6次考试。对于 班上的每个学生,输入文件中都有一行。该行包含学生的第一行 名称(不超过10个字符),姓氏(不超过12个字符),ID#(6个字符的字符串)和6个整数测试分数。 输入文本文件应该命名 student_input.dat
还要注意之间的空格量 姓名,ID和成绩 可以是任意的,即任何数字。但至少会有一个空间。 最后一个等级和不可见符号之间可能有一个空格,表示行'/ n'的结束。 每行的字符总数不会超过256,包括结尾 线符号。
此外,我们不能使用任何涉及字符串的内容,所以这几乎限制了我只使用c字符串。
我的问题是我目前只是试图将提取的字符串char转换为int数组,因此我可以对它们进行数学运算。
这是我目前的代码。
int main()
{
char * lastName;
char * firstName;
char * idNumber;
char * testScores;
char rawData[256] = "";
ifstream fin;
ofstream fout;
fin.open("student_input.dat");
if (!fin)
{
cout << "Program terminated. Input file did not open." << endl;
fin.close();
return 1;
}
if(fin)
{
for( int i = 0; i < 41; i++)
{
fin.getline(rawData, 256, '\n');
lastName = strtok(rawData, " ");
cout << lastName;
firstName = strtok(NULL, " ");
cout << firstName;
idNumber = strtok(NULL, " ");
cout << idNumber << " ";
for( int j = 0; j < 6; j++)
{
testScores = strtok(NULL, " ");
cout << testScores << " ";
}
cout << endl;
}
}
return 0;
}
答案 0 :(得分:0)
如果我正确理解了这个问题,您可能会遇到两个具体问题:
我给你两个解决方案(不发布实际代码,因为它是(可能的)学校作业)。
解决方案1:
1. Let input be a string or array of characters
2. Read the entire line into input
3. Set index = 0
4. while (index is not beyond the end of input)
4.1. Set start = (first non-whitespace character in input starting from index)
4.2. Set end = (first whitespace character / end of line character / end of file in input starting from start)
4.3. Set substring = (string containing the characters in input from indices start to end-1, both end inclusive)
4.4. Save substring (into an array or whatever).
4.5. Set index = end
5. end-while
这样,您将所有以空格分隔的子字符串作为不同的字符串。根据需要处理它们(即,第一个子串是第一个名称,第二个是姓氏等等)......
找到包含成绩的字符串后,可以在评论中使用atoi或者编写一个将包含单个数字的字符串转换为整数的函数。
解决方案2:
1. Declare three string (or array of chars) variables firstname, lastname and id
2. Declare six integers naming grade1 to grade6
3. Use the >> operator of ifstream to read into the values sequentially, that is, read to firstname, lastname, id, grade1,...grade6
&gt;&gt;运算符应该处理字符串或整数问题,并且您也不必担心空格的数量。
如果你想避免atoi,我不建议避免,那么这里有一个简单的算法将数字集合转换为数字:
1. Let input = array of characters / string containing only numerical letters.
2. Set index = 0
3. Set sum = 0
4. While index is not beyond the last index at input
4.1. Set c = the character at index
4.2. Set value = ASCII value of c
4.3. Set sum = sum * 10 + value;
4.4. Increase index by 1
5. End-while
希望这会有所帮助:)