使用fstream写a时的空格

Posted

技术标签:

【中文标题】使用fstream写a时的空格【英文标题】:Blank spaces when using fstream to write a 【发布时间】:2016-11-07 17:04:21 【问题描述】:

使用fstream在文件中写入字符串是在每个字母之间放置一个空格,我正在编写的字符串来自将二进制代码转换为ascii的函数:

void almacenar(string texto)
    
    string temp;   
    string test = "hola";   
    string compreso =""; 

    remove("compreso.daar");

    int textosize=texto.size();   
    int i = 0;

    while (i<textosize)   
        while(temp.size()!=8)   
            temp=temp+texto[i];  
            i++;   
            if (i>=textosize)    
                break;
            
            
        compreso=compreso+bitoascii(temp);   
        temp.clear();   
         
    Escribir(test,"compreso.daar");


int Escribir(string i,const char* archivo)
   
    fstream outputFile;   
    outputFile.open(archivo, fstream::app);       
    outputFile<<i;   
    outputFile.close();   
    return 0;   
     

string bitoascii(std::string data)
  
   std::stringstream sstream(data);  
    std::string output;  
    while(sstream.good())  
    
        std::bitset<8> bits;  
        sstream >> bits;  
        char c = char(bits.to_ulong());  
        output += c;  
    
   return output;

如果我通过控制台打印包含 Ø 的字符串没有空格,则文件应该有“Ø”有“Ø”或“ØØ”是“ØØ”

【问题讨论】:

请提供Minimal, Complete, and Verifiable example 顺便说一句,您应该将textosize 声明为const int,因为它在分配后不会更改。其他变量也是如此。 Ø 是 ASCII 字符吗? ASCII code 是什么?你怎么知道有空格? 因为在写入txt文件时,每个字母之间都有空格,但是如果我通过控制台打印它就没有空格 Ø 只是一个例子,这是一个霍夫曼压缩器 【参考方案1】:

在函数bitoascii()中,在将数据从sstream传输到bits后,您并没有检查传输是否成功,而是没有转换数据,bits的值为0x00,该值记录在文件,但字符 '\0' 不可打印。

只需添加sstream.good() 即可知道bits 是否正确 在输出字符串中添加字符之前编写。

函数bitascii()应该是:

string bitoascii(std::string data)
  
   std::stringstream sstream(data);  
    std::string output;  
    while(sstream.good())  
    
        std::bitset<8> bits;  
        sstream >> bits;
        // check is the transfer failed then exit from while
        if (!sstream.good()) break;  
        char c = char(bits.to_ulong());  
        output += c;  
    
   return output;
  

【讨论】:

感谢您的帮助 嗯,也谢谢你,我之前没玩过bitset。所以,帮助和玩耍是最好的。

以上是关于使用fstream写a时的空格的主要内容,如果未能解决你的问题,请参考以下文章

C++标准I/O库:iostream, fstream, sstringstream

C++(八):fstream读写操作

为啥 fstream 在这里不起作用(在文件中读/写)?

iostream fstream istringstream

C++文件流的C++ 中 *fstream 操作

C++文件操作fstream