将包含空格的文件中的文本存储为字符串
storing text to string from a file that contains spaces
所以作为一种爱好,我已经在C++中做了大约3个月的算法。到目前为止,我从未遇到过无法通过谷歌搜索解决的问题。我试图从一个将被转换为哈希表的文本文件中读取数据,但当我试图从文件中捕获数据时,它会以空格结束。这是代码
#include <iostream>
#include <fstream>
int main()
{
using namespace std;
ifstream file("this.hash");
file >> noskipws;
string thing;
file >> thing;
cout << thing << endl;
return 0;
}
我知道noskipws标志,只是不知道如何正确实现它
当为std::string
使用格式化的输入运算符时,它总是停在流认为是空白的地方。使用std::locale
的字符分类方面std::ctype<char>
,您可以重新定义空间的含义。不过,这有点复杂。
如果您想读取特定的分隔符,可以使用std::getline()
,可能会指定您感兴趣的分隔符。例如:
std::string value;
if (std::getline(in, value, ',')) { ... }
读取字符,直到找到逗号或到达文件末尾,并将字符存储到value
中的分隔符。
如果你只想读取整个文件,一种方法是使用
std::ifstream in(file.c_str());
std::string all((std::istreambuf_iterator<char>(in)), std::istreambuf_iterator<char>());
我认为您尝试执行的操作的最佳工具是get
、getline
或read
。现在,这些都使用char
缓冲区,而不是std::string
缓冲区,所以需要更多的考虑,但它们实际上非常简单。(编辑:正如Dietmar Kühl所指出的,std::getline( file, string )
使用c++字符串而不是字符缓冲区,所以我实际上建议这样做。这样你就不必担心最大行长度了)
下面是一个将在整个文件中循环的示例:
#include <iostream>
int main () {
char buffer[1024]; // line length is limited to 1023 bytes
std::ifstream file( "this.hash" );
while( file.good( ) ) {
file.getline( buffer, sizeof( buffer ) );
std::string line( buffer ); // convert to c++ string for convenience
// do something with the line
}
return 0;
}
(请注意,行长度限制为1023字节,如果一行更长,它将被分成2个读数。当它是真正的换行符时,你会在字符串的末尾看到一个n
字符)
当然,如果你提前为文件设定了最大长度,你可以相应地设置缓冲区,然后取消循环。如果缓冲区需要很大(超过几千字节),则可能应该使用new char[size]
和delete[]
而不是静态数组,以避免堆栈溢出。
这是一个参考页面:http://www.cplusplus.com/reference/fstream/ifstream/
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 在向量 C++14(无限制联合)的结构内的联合中创建和存储字符串
- 如何存储字符串列表
- 在向量中存储字符串存在 SEG 错误
- 指针存储字符串?
- 逐个字母存储字符串并打印
- 将字符数组转换为字符串并存储字符串?
- 当分配动态内存以存储字符串副本时,程序会中断
- 在C/C++中存储字符串、数组和指针,哪种方法更有效
- 我们如何以 7 位格式存储字符串
- C 存储字符串输入为CString
- TVItem lparam存储字符串
- C++以相反的顺序存储字符串
- 如果存储字符串的char数组小于字符串,则C++实际存储字符串
- 为什么我的 SetBookTitle 不存储字符串
- 如何在 C 中有效地存储字符串的映射
- 如何使用好友运算符存储字符串
- 如何在 C++ 中存储字符串和整数串联的变量
- 如何在 c++ 中存储字符串数组
- 存储字符串