gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 02:37:18 25 4
gpt4 key购买 nike

我有一堆基于 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com