c++ - 使用 C++ 读取多个不同长度的文本字符串

标签 c++ char

我有一堆基于 ASCII 的文本文件,用作各种计算机程序的输入文件,我需要将它们转换为不同的格式。每个输入文件都以 4 位数字开头,如果前四位数字以 0(数字零)开头,则随后是进一步的输入数据或注释行。我正在开发一个基于 C++ 的文件转换器,我希望它读入四位数字,如果该数字为零,则读入它后面的注释行。下面提供了一个例子。 C++ 可以轻松地将数字作为数组或使用 std::vector 读取;然而,读取字符串变得更加复杂。首先,如果每个评论行的字数相同,我可以将每个字符串视为在固定列中填充自己的行,但由于每个评论行的字数不同,因此列数在每一行读入会有所不同。有没有一种简单的方法来读取注释行,其中 C++ 不会将每个单词之间的空格视为一列数据的结尾和另一列数据的开头?下面的文件示例中使用了通用数字和数据,但希望您能看到以数字 0 开头的注释行后面有不同数量的单词,因此无法将文件作为一系列数据列读取。

0001 Input File Name
0001 - Description of input file goes here
0001 - PROGRAM name that works on this data
0000 ==========================================
0001 List of references used in the development of this input file
0001 [1] Ref. 1
0001 [2] Ref. 2
0001 [3] Ref. 3
1100 Input line 1:       CBRD 1-0220
1101 Core Length (mm):   8.189
1102 Core diameter (mm): 37.81

最佳答案

使用 getline 函数从文件中读取一行到一个字符串,然后对该字符串进行操作以执行任何您想要的操作。

类似于:while(getline(file, string)) { ... }

您不需要知道每行的最大字符数。 这就是我的意思:

 int main() {
      std::fstream iFile("Input.txt", std::fstream::in);
      //You might want to check if it is open
      std::string line;

      int firstNumber;
      std::string word;
      while(getline(iFile, line)){
        std::stringstream lineStream(line);

        lineStream >> firstNumber;
        if(firstNumber == 0) { // modify based on what you want to do
          while(lineStream >> word) {
            std::cout << word << " ";
          }
        }
      }
      std::cout << std::endl;
      iFile.close();
    }

关于c++ - 使用 C++ 读取多个不同长度的文本字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27046369/

相关文章:

c++ - 将 MFC 的 CString 转换为 ASCII 和 UNICODE 的 int

c++ - 为什么两个声明的 char* 变量获得相同的地址?

有符号十进制数的 char* 到 2s 补码二进制表示的 char*?

java - 在 Java 中检查字符是否为元音的最佳方法是什么?

c - getchar() 在 c 中不起作用

c - 增加 char 数组的最大大小

c++ - operator= 在我的自定义字符串类中不能正常工作

c++ - Boost Filesystem 在 Linux 上创建目录,用 "/"替换 "\"

c++ - QT 使用 MinGW 启用交叉编译(预编译)

c++ - 当同名类模板存在时,需要范围解析运算符调用成员函数模板