从文件中读取和显示字符串
reading and displaying strings from file
我使用重载插入运算符将一些字符串存储在文本文件中。
ostream & operator << (ostream & obj,Person & p)
{
stringstream ss;
ss << strlen(p.last) << p.last << strlen(p.first) << p.first
<< strlen(p.city) << p.city << strlen(p.state) << p.state;
obj << ss.str();return obj;
}
文件内容如下所示
4bill5gates7seattle10washington
我现在需要先读取长度并显示 string.And 继续显示所有 strings.How 以使用重载提取运算符来完成此操作?
一次读取一个字符并使用std::string::push_back
附加到字符串变量。有一个 std::stoi
会将您的字符串长度转换为整数。我可以建议当你创建你的文本文件时在你的整数长度后放置一个空格,然后你可以 cin >> string_length
并避免使用 if
语句来控制你何时找到数字的结尾, 或新字符串的开头。
此外,如果您向我们展示了您的尝试,将会更有帮助,以便我们可以更具体地帮助您。
像这样operator <<
ostream & operator >> ( ostream & obj, Person & p )
{
obj << strlen( p.last ) << " " << p.last << " " << strlen( p.first ) << " " << p.first << " "
<< strlen( p.city ) << " " << p.city << " " << strlen( p.state ) << " " << p.state;
return obj;
}
和operator >>
这样
istream & operator >> ( istream & obj, Person & p )
{
obj >> p.last >> p.first >> p.city >> p.state;
return obj;
}
你可以这样做:
#include <iomanip>
#include <iostream>
#include <sstream>
#include <vector>
int main() {
std::istringstream in("4bill5gates7seattle10washington");
std::vector<std::string> strings;
unsigned length;
while(in >> length) {
std::string s;
if(in >> std::setw(length) >> s)
strings.push_back(s);
}
for(const auto& s : strings)
std::cout << s << '\n';
}
免责声明:文件格式不对。
注意:这不是提取 'Person',而是字段。我把它留给你。
我使用重载插入运算符将一些字符串存储在文本文件中。
ostream & operator << (ostream & obj,Person & p)
{
stringstream ss;
ss << strlen(p.last) << p.last << strlen(p.first) << p.first
<< strlen(p.city) << p.city << strlen(p.state) << p.state;
obj << ss.str();return obj;
}
文件内容如下所示
4bill5gates7seattle10washington
我现在需要先读取长度并显示 string.And 继续显示所有 strings.How 以使用重载提取运算符来完成此操作?
一次读取一个字符并使用std::string::push_back
附加到字符串变量。有一个 std::stoi
会将您的字符串长度转换为整数。我可以建议当你创建你的文本文件时在你的整数长度后放置一个空格,然后你可以 cin >> string_length
并避免使用 if
语句来控制你何时找到数字的结尾, 或新字符串的开头。
此外,如果您向我们展示了您的尝试,将会更有帮助,以便我们可以更具体地帮助您。
像这样operator <<
ostream & operator >> ( ostream & obj, Person & p )
{
obj << strlen( p.last ) << " " << p.last << " " << strlen( p.first ) << " " << p.first << " "
<< strlen( p.city ) << " " << p.city << " " << strlen( p.state ) << " " << p.state;
return obj;
}
和operator >>
这样
istream & operator >> ( istream & obj, Person & p )
{
obj >> p.last >> p.first >> p.city >> p.state;
return obj;
}
你可以这样做:
#include <iomanip>
#include <iostream>
#include <sstream>
#include <vector>
int main() {
std::istringstream in("4bill5gates7seattle10washington");
std::vector<std::string> strings;
unsigned length;
while(in >> length) {
std::string s;
if(in >> std::setw(length) >> s)
strings.push_back(s);
}
for(const auto& s : strings)
std::cout << s << '\n';
}
免责声明:文件格式不对。
注意:这不是提取 'Person',而是字段。我把它留给你。