如何将文本文件存储到带有空格的字符数组中?

Posted

技术标签:

【中文标题】如何将文本文件存储到带有空格的字符数组中?【英文标题】:how to store a text file into a char array with spaces? 【发布时间】:2019-03-12 16:44:12 【问题描述】:

我一直在尝试在文件中写入一些文本,然后将这些文本存储在 char 数组中,但它一直忽略空格。 这是我一直在尝试的代码。 谢谢!

ofstream ofile;
    ofile.open("file.txt");
    int i,item;
    char array[100];
    ofile << "Amna Alhadi Alnajjar" << endl;
     ofile.close();
     ifstream ifile;
     ifile.open("file.txt");
       i=0;
      while(!ifile.eof())
      
          ifile >> array[i];
          i++;
      
      ifile.close();
      i=0;
      while(array[i]!='\0')
      
         cout<< array[i];
          i++;
      

【问题讨论】:

首先请阅读Why is iostream::eof inside a loop condition considered wrong? 那么对于您的问题:“输入”运算符&gt;&gt; 跳过空格。您可能有兴趣了解std::noskipws 操纵器。 最后,您确实需要在代码中添加一些错误检查以及边界检查。如果您无法打开任何文件,会发生什么?如果输入文件超过 100 个字符?更重要的是,您在哪里将空终止符 '\0' 添加到您的数组中?哦,对于最后一个循环,为什么不使用for 循环呢?如果你对数组进行空终止,为什么不将它作为一个字符串而不是一个字符一个字符地输出呢? @Someprogrammerdude 非常感谢,我会记住这一点。 【参考方案1】:

我认为您必须阅读此Read ASCII into std::string

将此代码添加到您的代码中

std::string str;
ifstream ifile2("file.txt");

ifile2.seekg(0, std::ios::end);   
str.reserve(ifile2.tellg());
ifile2.seekg(0, std::ios::beg);

str.assign((std::istreambuf_iterator<char>
           (ifile2)),std::istreambuf_iterator<char>());

const char * cad = str.c_str();
cout << endl;
cout << "new: " << str;
cout << "new: " << cad;

所有的输出

AmnaAlhadiAlnajjar
new: Amna Alhadi Alnajjar
new: Amna Alhadi Alnajjar

【讨论】:

以上是关于如何将文本文件存储到带有空格的字符数组中?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅将字母字符扫描到 C 中的数组中?

将int的多行文件存储到数组中

C ++:带有空格的cin到没有getline函数的字符串

如何将字符串(来自具有 n 行数的文件)存储在动态数组中? C++

如何将由空格缩进的用户输入存储到 String 数组中并将数字转换为 int 数组?

无法将文本文件行按空格分隔到向量中