在C++中获取空白后面的行
Get the line after white-space in C++
我想读取文本文件每行中的最后几个字符。在经过更好优化的C++代码中,我该如何做到这一点?例如,我的文件中的姓名和年龄由100名学生的空白分隔,每个学生都有新行,所以我只想阅读空白后的内容,即年龄,并进行进一步的比较。
File classlist.txt
Tanya 24
Max 16
Dic 21
到目前为止我写的代码
#include <fstream>
#include <iostream>
using namespace std;
int main()
{
ifstream class_details("classlist.txt");
if (!class_details.is_open())
{
cout<< "error"<<'n';
return;
}
string data;
% From here I am thinking on how to get the data after first whitespace
% in each line
class_details.close();
return 0;
}
@Joachim指出,输入运算符>>
在空白处分离。
您可以按如下方式使用它:
string name;
int age;
while (class_details >> name >> age) {
// Use name & age here.
}
class_details >> name
从输入流中提取一个单词(非空白字符),并将其存储在name
变量中,并返回原始流对象class_details
。这允许链接输入提取。。。
(由于class_details >> name
返回class_details
,我们可以进一步将>>
应用于表达式的返回值,以提取更多信息。)
>> age
继续提取,从输入流中读取(由于age
是整数变量)一个整数,并将其存储在age
变量中,并且(继续链)返回原始流对象class_details
。
while(...)
循环中的表达式返回(由于>>
运算符允许链接的方式)原始输入流,当在boolean
上下文中进行求值时,原始输入流返回流的good()
状态。如果遇到流的末尾,或者试图进行无效提取,或者出现任何其他问题,good()
将返回false
,并退出循环。
因此,在没有链接的情况下(而是使用,
运算符),上面的内容可以更详细地重写为:
string name;
int age;
while(class_details >> name, class_details >> age, class_details.good()) {
// Use name & age here.
}
编辑
如果目标是忽略名称字段(跳过名称而不将其提取到变量中),则可以使用ignore()
方法跳过所有内容,直到下一个空格字符:
int age;
while (class_details.ignore(numeric_limits<streamsize>::max(), ' ') >> age >> ws) {
// Use age here.
}
>> ws
用于消耗从"年龄"字段末尾到下一行名称字段开头的任何空白。。。特别是"换行"字符。
如果需要,您可以使用小于numeric_limits<streamsize>::max()
的数字。只需选择比你最长的名字更长的名字。
使用我鲜为人知的
1:每次复制数据以比较是否相同中断
while(1)
{
fgets(str1, sizeof(str1), f); // scanf what you want
if( strcmp(str1,str2)==0 )break;
strcpy(str2,str1);
}
2:最后添加了一些奇怪的
while(1)
{
fgets(str1, sizeof(str1), f); // scanf what you want
if( str1 == "key" )break;
}
- 无法通过空白将文本文件行分隔为矢量
- 由cin中的字符串中未捕获空白引起的分割错误
- 尝试从 XamlApplication 编译 C++/WinRT 空白应用程序时,我收到未解析的外部符号 winrt_make_*
- 代码精简版页面变为空白
- 在OpenCV C++中创建空白图像
- Gtkmm 窗口为空白,不显示任何小部件或标题
- 我如何使它,无论用户用空白字符串按 Enter 多少次,它总是打印"开始"字符串?
- OpenGL - 添加第二个着色器属性会导致空白屏幕
- 对象数组打印空白字符串
- 如何在c++中读取do-while循环中的空白
- C++缓冲区是如何工作的(关于空白)
- Shell_NotifyIcon在系统托盘中创建空白、无响应的图标
- 我需要帮助修复C++空白检测器
- 接受 istream 的空白值
- 多米诺骨牌计划。我不知道如何将我的矢量拉到空白中以打印出来
- OpenGL显示空白的白屏
- 如何创建一个程序来替换单个空白/选项卡的多个空白/选项卡
- 字符指针值为空白,为什么代码不打印5
- 在 OpenGL 中呈现空白的线框立方体
- 删除 std::future 和 std::p romise 的空白专用化