如何使用字符串操作来获取输入文本文件的某些部分?

时间:2016-03-31 07:31:29

标签: c++ string input getline

我有一个输入文本文件,其中有5行,其中一个人的名字,姓氏和他们的年龄相邻,例如:

Mark Cyprus 21
Elizabeth Monroe 45
Tom McLaugh 82
Laura Fairs 3
Paul Dantas 102

如何使用字符串操作从每一行中获取它们的年龄?

3 个答案:

答案 0 :(得分:3)

您可以使用sscanf()(查看链接,它有一个类似于您需要的示例)。

假设每行文本都被读入char数组sscanf(line, "%*s %*s %d", &age);

%*s

由于您对名字和姓氏不感兴趣,您可以使用#include <stdio.h> int main(int argc, char const *argv[]) { freopen("input.txt", "r", stdin); char line[100]; int age; while(fgets(line, 100, stdin) != NULL) { sscanf(line, "%*s %*s %d", &age); printf("%d\n", age); } return 0; } ,这将允许消费该行中的名字和姓氏文字,并且您赢了&#39 ; t需要将它们分配给任何变量。

下面是完成任务的完整代码,假设您有一个名为&#34; input.txt&#34;的文本文件。包含您在问题中提供的文本。

21
45
82
3
102

输出:

width:30%

一些链接:

答案 1 :(得分:2)

C ++ 中,可以帮助您的工具是std::istringstream,其中包括:#include <sstream>。它的工作原理如下:

std::ifstream ifs("mydatafile.txt");

std::string line;

while(std::getline(ifs, line)) // read one line from ifs
{
    std::istringstream iss(line); // access line as a stream

    std::string column1;
    std::string column2;
    std::string column3;

    iss >> column1 >> column2 >> collumn3; // no need to read further

    // do what you will with column3
}

std::istringstream所做的是允许您将std::string视为输入流,就像常规文件一样。

iss >> column1 >> column2 >> collumn3将列数据读入vaiables。

答案 2 :(得分:2)

试试这个:

#include<iostream>
#include<string>
#include<fstream>

int main()
{
    std::ifstream fin;
    fin.open("text");
    std::string str;
    while(fin>>str)
    {
        fin>>str;
        fin>>str;
        std::cout<<str<<"\n";
    }
    fin.close();
    return 0;
}

输出

21
45
82
3
102