4

在 c++ 中,ascii 字符有一个默认值。喜欢 !值为 33,"," 的值为 44,依此类推。

在我的文本文件“hehe.txt”里面是。;!,.

#include <iostream>
#include <fstream>

int main() {
    std::ifstream file("hehe.txt");
    if(file.eof()) 
        return 0;
    char ascii;

    while(file>>ascii) {
        std::cout << (int)ascii << " ";
    }
    system("pause");
} 

输出是59 33 44 46

编辑:当我运行我的程序时,如何防止从文本文件中读取空间被忽略?假设我在最后一个字符之后添加了空格;!,.,那么输出必须是59 33 44 46 32. 希望有人能给我一个想法如何做到这一点。

4

2 回答 2

5

问题是分隔符。当你使用file >> ascii它时,它会“吃掉”你所有的空间,因为它们被用作分隔符。

您可以使用getline然后迭代字符串中的所有字符。

std::ifstream file("../../temp.txt");
if(!file)return 0;
std::string line;

while (std::getline(file, line, '\0')){
    for(char ascii : line){
        std::cout<<(int)ascii << " ";
    }
}
system("pause");
return 0;

正如多恩赫格所说,还有可能是:

  while(file >> std::noskipws >> ascii){
    std::cout << (int) ascii << "\n";
  }
于 2013-09-18T10:44:24.917 回答
3

默认情况下,istream 对象将跳过空格作为 " " (32)。在阅读之前尝试添加>> std::noskipws到您的信息流中。

于 2013-09-18T10:51:09.990 回答