提问人:dailypassby 提问时间:8/23/2023 最后编辑:Vlad from Moscowdailypassby 更新时间:8/24/2023 访问量:57
如何从文本文件中的一行中间读取句子并将其存储到单个字符串中?[复制]
How can I read sentences from the middle of a line in text file and store it into a single string? [duplicate]
问:
嗨,我有一个文本文件,它应该是要创建的新游戏项目的数据,它看起来像这样:
1 Sword 5 10
2 Bow 5 10
3 Axe 5 10
4 Shield 5 10
5 Spear 5 10
我知道如何读取每个由空格分隔的单独片段并将它们存储到变量中,但是如果我想使用多个单词作为名称,例如“Big Sword”或“Heavy Bow”,并将其存储为单个字符串,该怎么办?
现在对于我正在使用的每条线
file >> id >> name >> value >> value
但是有没有办法让它,当它到达“名称”部分时,我可以指定它将存储到单个字符串中的单词数量,也可以使用灵活数量的单词来完成,例如“大剑”或“大锈剑”或“大锈重剑”,它仍然会知道这是一个大名字。
我还没有想出任何想法
答:
1赞
Vlad from Moscow
8/23/2023
#1
如果您的编译器支持 C++17,那么一个简单的方法是使用标头中声明的操纵器,该操作器允许将字符串存储在引号中。std::quoted
<iomanip>
这是一个演示程序。为简单起见,使用字符串流代替文件流。
#include <iostream>
#include <iomanip>
#include <sstream>
#include <string>
int main()
{
std::ostringstream os;
os << 1 << ' ' << std::quoted("Big Rusty Heavy Sword") << ' '
<< 5 << ' ' << 10;
unsigned int id;
std::string name;
int value1, value2;
std::istringstream is( os.str() );
is >> id >> std::quoted( name ) >> value1 >> value2;
std::cout << "id = " << id << ", name = " << name
<< ", value1 = " << value1 << ", value2 = " << value2
<< '\n';
}
程序输出为
id = 1, name = Big Rusty Heavy Sword, value1 = 5, value2 = 10
也就是说,您需要使用操纵器来存储一个多字字符串,然后使用操纵器来读取字符串。std::quoted
例如,您可以使用标准函数从文件中读取整行,然后使用基于该行的输入字符串流来读取单独的项目。std::getline
评论
std::getline
1 Big_Rusty_Heavy_Sword 5 10