我正在编写一个
Book
类作为我正在阅读的 C++ 书中的练习。我想存储作者的姓氏以对所有书籍进行排序。
假设作者的名字是:“Albert Ein Stein”
那么只有姓氏“Stein”应该被分开并存储。全名存储在字符串中:
std::string full_name = "Albert Ein Stein"
我认为将全名转换为字符串流并以某种方式仅检索缓冲区的最后一个元素将是一个很好的解决方案。像这样的东西:
void get_last_name (const std::string& full_name)
{
std::stringstream stream(full_name);
auto it = stream.end() - 1;
std::string last_name = *it;
}
但是这是无效的语法。仅检索字符串缓冲区的最后一个元素的简单方法是什么?
单词不是字符串流的“元素”。只有提取的工作方式(在空白处停止)才能让您提取单词。你就可以这样做:
std::string get_last_name (const std::string& full_name)
{
std::stringstream stream(full_name);
std::string word;
while(stream >> word);
return word;
}
或者,您可以从后面搜索
full_name
查找第一次出现的空白,然后相应地返回子字符串。