c++ - 如何检查文件是否仅包含整数?
问题描述
在我的项目中,我需要上传一个文件并检查其中的每一行是否有一个整数(正数或负数),以便它可以在向量中表示。
由于我正在研究 QT 和 C++,因此我考虑了两个建议,但是当我在文件中插入一个数字时,例如“35.2”和一个逗号,然后我按下开始按钮,程序就会崩溃。
有没有更好的解决方案来缓解这个问题?我附上了我正在评估的解决方案之一。
QFile file_in(file_name);
file_in.open(QIODevice::ReadOnly | QIODevice::Text);
QTextStream in(&file_in);
int elem;
int pos = 0;
QString s;
QIntValidator valid(-999, 999, this);
while(!in.atEnd())
{
in >> elem;
s = QString::number(elem);
if(!valid.validate(s,pos))
{
v.clear();
QMessageBox msg(this);
msg.setText("Input non valido");
msg.exec();
return;
}
else
{
v.push_back(elem);
}
}
解决方案
一个更简单的解决方案是逐行读取文件并检查当前行是否可转换为整数。
Qt 已经提供了很多方便的方法。例如,您会对QByteArray::toInt()
.
因此,解决方案可能是:
bool validate(const QString & file_name)
{
QFile in_f(file_name);
if(!in_f.open(QIODevice::ReadOnly | QIODevice::Text))
return false;
bool is_valid = true;
while(is_valid && !in_f.atEnd())
{
QByteArray line = in_f.readLine();
line.toInt(&is_valid); // is_valid is set to false if the conversion failed
}
return is_valid;
}
这样就没有崩溃。如果每一行包含一个整数,它将返回true
,否则,如果至少一行包含其他内容(字符串、双精度、...),它将返回false
。
如这里所实现的,如果文件为空,则函数将返回true
. 当然,如果您想返回,您可以为这种情况添加检查false
。
推荐阅读
- reactjs - 自定义组件 topbar 按钮事件 RNN v2
- java - 更新项目中的 SMTP 值和密钥库文件
- javascript - 使用 node express 应用程序下载文件作为响应
- php - 如何为工作的 php 应用程序创建一个 post html 页面?
- recursion - 没有显式返回的递归 TCL proc
- python - 将 pandas Groupby 与聚合函数 List 一起使用时出现 ValueError
- python - 如何从列表中查找包含某个值的行
- cmake - CMake 在 WSL 中找不到环境变量
- python - 有没有办法可以用第一列和列之间的关系建立一个矩阵?
- swift - 依赖图无法解析;发现这些相互矛盾的要求: