在 C++ 中确定 getline() 起点

Posted

技术标签:

【中文标题】在 C++ 中确定 getline() 起点【英文标题】:Determine a getline() starting point in C++ 【发布时间】:2013-04-07 17:52:00 【问题描述】:

这是我的代码的一部分

string line;
ifstream file ("Names.txt");

int i;
for (i = 0; i < line.length(); ++i) 
    if ('A' <= line[i] && line[i] <= 'Z') break;


string start = line.substr(i);
getline(file, start, '.');
cout << start;

我需要从第一个大写字母开始读取一行,直到文本文件中的第一个句点。目前它成功地从文件的开头读取到第一个句点。所以我在确定起点 i(第一个大写字母)时遇到了问题。

感谢您的帮助!

【问题讨论】:

line 未初始化为任何值,因此 i 为 0。 谢谢,我会努力解决的:) 【参考方案1】:
string line;                           // line is empty
ifstream file ("Names.txt");           // line is still empty

int i;                                 // still empty
for (i = 0; i < line.length(); ++i)   // still empty, line.length() == 0

这有帮助吗?您需要从文件中读取到行(使用 getline),然后解析行。

【讨论】:

【参考方案2】:

这样的事情应该可以工作:

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

using namespace std;

int main()

    string line;
    ifstream file ("file.txt");
    char temp;
    while(file>>temp)
    
        if(isupper(temp)) break;//First capital letter
    
    file.seekg(-1,file.cur);//rewind one char so you can read it in the string
    getline(file,line,'.');//read until the first .
    cout << line << endl;
    system("pause");
    return 0;

【讨论】:

比起file.cur,我更喜欢使用std::ios_base::cur 嗯,谢谢你的回答,我只是用整数和大写字母确定起点,但我会测试你在这里介绍的函数的可能性:)

以上是关于在 C++ 中确定 getline() 起点的主要内容,如果未能解决你的问题,请参考以下文章

C++的面向行的输入:getline()与get()

C++面向行输入:get()与getline()

C++基础:各种输入方法总结,cincin.get()cin.getline()getline()gets()getchar()

c++中 cincin.get()cin.getline()cin.getchar()的区别

C++学习之旅getgetline的用法

cin, getline() 与 get() 的区别