如何检查流中文件的下一个单词是否为 alpha?
How do I check if next word from a file in stream isalpha?
我有一个文件,InputFile.txt,格式为firstname
,lastname
,score
:
Mike Smith 80
James Jones 75
我想使用 ifStream& 将这些值读入我的 c++ 程序中。我是这样做的:
std::ifstream inStream("InputFile.txt");
std::string firstname;
std::string lastname;
int score;
while(inStream.peek() != EOF)
{
inStream >> firstname >> lastname >> score;
//further processing ignored for brevity...
}
我想检查firstname
和lastname
是否isalpha() == true
,score
是否都是数字(可能带有isdigit()
.
以下方法不起作用:
while (inStream >> firstname)
{
for (auto element : firstname)
{
if (!isalpha(element))
{
std::cerr << "Error not a alpha character.";
}
}
}
最简单的方法是什么?
可以直接写
while (inStream >> fname >> lname >> score)
{
//further processing ignored for brevity...
}
当且仅当成功读取整个语句时,它将计算为隐式 true。 也就是说,您不需要验证这里的score
是否为数字。它将读作一个数字。
至于fname
和lname
的问题,我建议检查一下
inline bool is_alpha(const std::string& s) noexcept {
return std::find_if_not(s.begin(), s.end(),
[](unsigned char c) { return std::isalpha(c); }) == s.end();
}
相关文章:
- 重新定位图像时如何前进到下一个内存块
- 为什么C++对链表中的下一个节点使用指针,而像 C# 或 Java 这样的语言只使用类 Node 的名称?
- 用于在 C++ 中使用 while 循环查找下一个素数的简单函数
- CIN 仅在输入非数字值时跳过下一个 CIN
- 查找最小的下一个更大的元素
- 转到基于范围的 for 循环中的下一个迭代器
- 如何检查流中文件的下一个单词是否为 alpha?
- 如何打印下一个字母直到 Z 并继续到 A?
- 在使用堆栈为下一个最大数字编写代码时面临 SIGSEGV(分段错误)
- 使用一个内存集数组和单个堆栈在 O(n) 中查找数组的下一个更大元素
- 有没有一种标准方法可以在C++中获取第 n 个"下一个"浮点值
- 下一个云桌面客户端构建过程
- C++自定义流操纵器,用于更改流上的下一个字符串
- 链表指针赋值为什么我们不能直接将尾巴分配给 temp 而不是尾巴>尾巴下一个
- 下一个排列定义
- 查找下一个具有真值C++的数组索引
- 如何比较文件中包含的下一个字符
- 检查IP是否在其他IP网络范围内,并查找下一个可用IP
- C++宏 - 作为下一个单词传递"parameter"而不是 () 中传递
- 在c++中找到文本中的单词,然后打印下一个特定的行