我想阅读文本文件每行的最后几个字符。如何在更优化的C ++代码中实现这一目标?例如,我的文件的名称和年龄由100个学生的空格分隔,每个学生都有新行,所以我只想读取空格后的内容,即年龄并进行进一步的比较。
return $query->where(['user_id' => $user->id]);
到目前为止我编写的代码
File classlist.txt
Tanya 24
Max 16
Dic 21
答案 0 :(得分:3)
正如@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
上下文中进行评估时返回流&#39 ; s 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
被用来消耗&#34; age&#34;结束时的任何空白区域。字段到下一行名称字段的开头...具体来说,&#34;新行&#34;字符。
如果需要,您可以使用小于numeric_limits<streamsize>::max()
的数字。只需选择比你最长的名字更长的东西。
答案 1 :(得分:0)
我的知识更少
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;
}