gpt4 book ai didi

C++ 读取只有数字的文件

转载 作者:行者123 更新时间:2023-11-28 06:42:35 24 4
gpt4 key购买 nike

我正在编写一个读取文件的 C++ 程序。文件应该只包含数字,如果不是,它只会抛出一个错误。

我目前可以遍历文件和行并获取每个标记并告诉每个标记是什么,但是由于我是 c++ 的初学者,我不知道如何只包含数字。

示例文件是:

1 2 3 4 5.645 50603 0.543 5.0
100 5.555555 600 1 0 5

67.64

65.6 70

<spaces>

90

我尝试了多种查找方式,并尝试使用空格作为分隔符,但我必须考虑一行空空格,分隔符搞砸了。

到目前为止我已经尝试过这些方法:

此方法接收“5.0”,但仅将其打印为“5”: 双我;

while(fin >> i)
{
cout << " Token value: " << i << endl;
}

此方法不会使用仅包含空格的换行符/换行符:

int i = 0;
int lineNumber = 1;
char token;
const char* const delimeter = " ";
while (fin.good())
{
// read line into memory with a max length of 10 characters per line
char buffer[1024];
fin.getline(buffer, 1024);

// array to hold the values until compution
char* token[1024] = {};


// strtok splits a string into tokens
// get the first token
token[0] = strtok(buffer, delimeter);

// check if the first line is blank (blank is set to 0)
if (token[0])
{
for (i = 1; i < 1024; i++)
{
// get more tokens
token[i] = strtok(0, delimeter);

// check if there are no more tokens
if (!token[i])
{
break;
}
}
}

for (int j = 0; j < i; j++)
{

// if (token[j] == " ") cout << " this is a space" << endl;
cout << " Line: " << lineNumber << " --- Token[" << j << "] = " << token[j] << endl;
}
cout << endl;
i++;
lineNumber++;

}

对 C++ 初学者(我有 Java 经验)有什么建议吗?

编辑:周期角案例:

如果句号在最后一行并且是唯一的字符,则似乎无法识别句号。它不会出错,也不会打印出句点:

12 35 67777.75
54433
.

但是,如果是这样,它确实会抛出正确的错误:

12 36 67777.75
.
54433

最佳答案

这可能对你有用。

你可以这样一个一个读入数字:

int main()
{
std::ifstream fin("mydatafile.txt");

// check for errors
if(!fin.is_open())
{
std::cerr << "ERROR: opening input file:" << std::endl;
return 1; // error code 1
}

double d;
while(fin >> d) // skips spaces and newlines automatically
{
// do what you want with the number d here (print it?)
std::cout << d << '\n';
}

// Did we read all the data or was there a problem?
if(!fin.eof())
{
std::cerr << "ERROR: failed to read all the data from input file:" << std::endl;
return 2; // error code 2
}

}

while(fin >> d) 非常地道。它确保只有在读取成功时才执行循环体。它考虑到读取期间发生的错误。

编辑:

添加测试以查看文件是否一直读到最后

编辑:

作为替代方案,您可以将文本文件中的每个条目读入 std::string,然后测试 std::string 是否转换为 或不:

#include <fstream>
#include <sstream>
#include <iostream>

int main()
{
std::ifstream fin("mydatafile.txt");

// check for errors
if(!fin.is_open())
{
std::cerr << "ERROR: opening input file:" << std::endl;
return 1; // error code 1
}

std::string s;
while(fin >> s) // skips spaces and newlines automatically
{
// now see if we can convert s into a number by
// turning s into an input stream and read it into a number

double d;
if(std::istringstream(s) >> d)
{
// do what you want with the number d here (print it?)
std::cout << d << '\n';
}
else
{
std::cerr << "ERROR: bad data: \"" << s << "\"" << std::endl;
// continue? Or not?
}
}

if(!fin.eof())
{
std::cerr << "ERROR: failed to read all the data from input file:" << std::endl;
return 2; // error code 2
}
}

关于C++ 读取只有数字的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25695585/

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