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

nbnkbykc  于 2022-12-15  发布在  其他
关注(0)|答案(3)|浏览(121)

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

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

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

c3frrgcw

c3frrgcw1#

您可以使用sscanf()(看一下链接,它有一个与您需要的类似的示例)。
假设将每行文本读入char数组line

sscanf(line, "%*s %*s %d", &age);

因为你对名字和姓氏不感兴趣,所以你可以使用%*s,它允许 * 消费 * 行中的名字和姓氏,而且你不需要把它们赋给任何变量。
下面是完成该任务的完整代码,假设您有一个名为“input.txt”的文本文件,其中包含您在问题中给出的文本。

#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;
}

输出:

21
45
82
3
102

一些链接:

pjngdqdw

pjngdqdw2#

试试这个:

#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
eufgjt7s

eufgjt7s3#

在**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 >> column3; // no need to read further
    
    // do what you will with column3
}

std::istringstream的作用是允许您将std::string视为输入流,就像常规文件一样。
iss >> column1 >> column2 >> column3将列数据读入变量。

相关问题