将C-String转换为int数组

时间:2014-02-10 22:56:01

标签: c++

因此,对于我的编程作业,我必须

处理输入文件中的数据并对其执行一些操作。

这是参数。

一名教师的班级不超过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;
}

1 个答案:

答案 0 :(得分:0)

如果我正确理解了这个问题,您可能会遇到两个具体问题:

  1. 如何从字符串中提取特定数据值?
  2. 如何将包含数字字符的字符串转换为数字?
  3. 我给你两个解决方案(不发布实际代码,因为它是(可能的)学校作业)。

    解决方案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
    

    希望这会有所帮助:)