【发布时间】:2014-09-06 00:10:24
【问题描述】:
我正在编写一个读取文件的 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”: 双i;
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
【问题讨论】:
-
到目前为止你尝试过什么代码?
-
添加了到目前为止我尝试过的代码。
-
是逐行读取文件重要还是只需要一个一个地读取数字?
-
哪个效率更高。是逐行读取还是逐行读取没有限制,但最终我需要将它们全部计算出来才能计算它们的平均值。
-
在 C++ 中过滤非数字是否重要?否则,您可能会通过
grep -e "(\d+\s*)+" 'yourfile.txt' > 'yourfile.new.txt'之类的方式过滤输入文件,只留下用空格分隔的数字。