如何在C+中逐字读取文本文件+; 我想知道有没有人能帮我弄明白如何从C++中的文本文件中读取字符。这样,我就可以有一个while循环(虽然还有文本),在这个循环中,我将文本文档中的下一个字符存储在一个temp变量中,这样我就可以对它做一些事情,然后对下一个字符重复这个过程。我知道如何打开文件和所有内容,但是temp=textFile.getchar()似乎不起作用。提前谢谢。

如何在C+中逐字读取文本文件+; 我想知道有没有人能帮我弄明白如何从C++中的文本文件中读取字符。这样,我就可以有一个while循环(虽然还有文本),在这个循环中,我将文本文档中的下一个字符存储在一个temp变量中,这样我就可以对它做一些事情,然后对下一个字符重复这个过程。我知道如何打开文件和所有内容,但是temp=textFile.getchar()似乎不起作用。提前谢谢。,c++,file,text,character,C++,File,Text,Character,Re:textFile.getch(),这是你编造的,还是你有参考资料说它应该有效?如果是后者,就扔掉它。如果是前者,不要那样做。得到一份好的推荐信 char ch; textFile.unsetf(ios_base::skipws); textFile >> ch; 您可以尝试以下方法: char ch; fstream fin("file", fstream::in); while (fin >> noskipws >> ch) { cout &

Re:
textFile.getch()
,这是你编造的,还是你有参考资料说它应该有效?如果是后者,就扔掉它。如果是前者,不要那样做。得到一份好的推荐信

char ch;
textFile.unsetf(ios_base::skipws);
textFile >> ch;

您可以尝试以下方法:

char ch;
fstream fin("file", fstream::in);
while (fin >> noskipws >> ch) {
    cout << ch; // Or whatever
}
charch;
fstream-fin(“文件”,fstream::in);
而(fin>>noskipws>>ch){

cout假设
temp
char
并且
textFile
std::fstream
的派生

您要查找的语法是

textFile.get( temp );

在C++中没有理由不使用C<代码> <代码>,实际上它通常是最佳的选择。
#include <stdio.h>

int
main()  // (void) not necessary in C++
{
    int c;
    while ((c = getchar()) != EOF) {
        // do something with 'c' here
    }
    return 0; // technically not necessary in C++ but still good style
}
#包括
int
()//(空)在C++中不需要
{
INTC;
而((c=getchar())!=EOF){
//在这里用“c”做点什么
}
返回0;/在技术上没有必要在C++中,但仍然不错的风格
}

引用Bjarne Stroustrup的话:“该>>运算符用于格式化输入,即读取预期类型和格式的对象。如果不需要这样做,并且我们希望将字符作为字符读取,然后对其进行检查,则使用get()函数。”


@cnicutar和@Pete Becker已经指出了使用
noskipws
/unsetting
skipws
一次读取一个字符而不跳过输入中的空白字符的可能性

另一种可能是使用
istreambuf_迭代器
读取数据。除此之外,我通常会使用标准算法,如
std::transform
来进行读取和处理

举个例子,假设我们想做一个类似于凯撒的密码,从标准输入复制到标准输出,但每个大写字符加上3,所以
a
将变成
D
B
可以变成
E
,等等。(最后,它会将
XYZ
转换为
ABC

如果我们要在C中这样做,我们通常会使用如下循环:

int ch;
while (EOF != (ch = getchar())) {
    if (isupper(ch)) 
        ch = ((ch - 'A') +3) % 26 + 'A';
    putchar(ch);
}
std::transform(std::istreambuf_iterator<char>(std::cin),
               std::istreambuf_iterator<char>(),
               std::ostreambuf_iterator<char>(std::cout),
               [](int ch) { return isupper(ch) ? ((ch - 'A') + 3) % 26 + 'A' : ch;});
在C++中做同样的事情,我可能会编写代码更像这样:

int ch;
while (EOF != (ch = getchar())) {
    if (isupper(ch)) 
        ch = ((ch - 'A') +3) % 26 + 'A';
    putchar(ch);
}
std::transform(std::istreambuf_iterator<char>(std::cin),
               std::istreambuf_iterator<char>(),
               std::ostreambuf_iterator<char>(std::cout),
               [](int ch) { return isupper(ch) ? ((ch - 'A') + 3) % 26 + 'A' : ch;});
std::transform(std::istreambuf_迭代器(std::cin),
std::istreambuf_迭代器(),
std::ostreambuf_迭代器(std::cout),
[](int-ch){return isupper(ch)?((ch-'A')+3)%26+'A':ch;});
通过这种方式,您将接收连续字符作为传递给lambda函数(在本例中)的参数值(如果愿意,您可以使用显式函子而不是lambda)。

//变量
_文件的char END_='#';
字符单字符;
//从输入文件中获取字符
获取(单字符);
//读取文件,直到到达#
//当读取指针读取#时,它将退出循环
//这要求在文本文件中最后一个字符是#号
while(singleCharacter!=文件的结尾)
{

CUT< P>这是一个C++的时尚功能,可以用来读取文件char。
void readCharFile(string &filePath) {
    ifstream in(filePath);
    char c;

    if(in.is_open()) {
        while(in.good()) {
            in.get(c);
            // Play with the data
        }
    }

    if(!in.eof() && in.fail())
        cout << "error reading " << filePath << endl;

    in.close();
}
void readCharFile(字符串和文件路径){
ifstream-in(文件路径);
字符c;
if(in.is_open()){
while(in.good()){
in.get(c);
//玩弄数据
}
}
如果(!in.eof()&&in.fail())

是的。这就是@cnicular使用
noskipws
的原因。我刚刚编辑了我的来解决这个问题。@PeteBecker是的,我喜欢它,因为这就是
C
读取单个字符时所做的。你放在那里的参数
noskipws
就是我要找的。旧线程,等等。但问题是“来自文件”您不能使用
getchar
读取stdin以外的任何内容。
getc
是您想要的;您必须在某个地方打开一个文件指针。