在C ++中获取white-space之后的行

时间:2016-04-19 17:50:34

标签: c++ file

我想阅读文本文件每行的最后几个字符。如何在更优化的C ++代码中实现这一目标?例如,我的文件的名称和年龄由100个学生的空格分隔,每个学生都有新行,所以我只想读取空格后的内容,即年龄并进行进一步的比较。

    return $query->where(['user_id' => $user->id]);

到目前为止我编写的代码

 File classlist.txt
 Tanya 24
 Max 16
 Dic 21 

2 个答案:

答案 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;

    }