首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 文本文件讀取解析到結構體:逐行讀取 + 字符串分割轉換

     編輯:程式設計綜合問答

數據格式


大學英語B 4.0 2.67
高等數學下 6.0 3.67
離散數學上 2.5 3.67
...

結構體定義

struct Course {
    char name[20];
    float credit;
    float mark;
};
Course courses[N];

讀取解析代碼

#include <fstream>
#include <sstream>
#include <string>

int readCourses(const char* filename, Course* courses, int maxCount) {
    std::ifstream fin(filename);
    if (!fin) return -1;
    
    std::string line;
    int idx = 0;
    while (std::getline(fin, line) && idx < maxCount) {
        if (line.empty()) continue;
        std::istringstream iss(line);
        std::string name;
        float credit, mark;
        // 假設課程名無空格,否則需按最後兩個浮點數分割
        if (iss >> name >> credit >> mark) {
            strncpy(courses[idx].name, name.c_str(), 19);
            courses[idx].name[19] = '\0';
            courses[idx].credit = credit;
            courses[idx].mark = mark;
            idx++;
        }
    }
    return idx;
}

關鍵點

  • 用 std::getline 逐行讀取,避免格式錯誤導致流狀態異常;
  • std::istringstream 自動按空白字符分割,配合 >> 直接提取數值;
  • 字符串轉浮點由流提取自動完成(相當於 atof);
  • 課程名含空格時,需從行尾反向提取兩個 float,剩餘作為名稱。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved