反转字符串中单词的顺序
Reverse order of words in a string
我正在做一道题来颠倒字符串中单词的顺序。例如,如果您有 str1 = "the sky is blue" 那么解决方案应该是 "blue is sky the".
这是我的代码:
class Solution
{
public:
list<string> words;
void createList(string s)
{
istringstream iss(s);
string token;
while(getline(iss, token, ' '))
{
words.push_back(token);
}
}
string reverseWords(string s)
{
list<string>::iterator iter = words.begin();
string newString = "";
createList(s);
newString.append(*iter);
for (iter = (iter+1); iter != words.end(); iter++)
{
newString.append(" ");
newString.append(*iter);
}
return newString;
}
};
我的问题是....
我是否正确使用列表迭代器?我收到一个编译器错误,提示 "Line 25: no match for ‘operator+’ " 引用了 reverseWords() 中的 for 循环。
这个编译很好,所以是的,++iter 是一个有效的语句。自增有效,跳跃无效:
list<string> words;
void createList(string s)
{
istringstream iss(s);
string token;
while(getline(iss, token, ' '))
{
words.push_back(token);
}
}
string reverseWords(string s)
{
list<string>::iterator iter = words.begin();
string newString = "";
createList(s);
newString.append(*iter);
++iter;
for (; iter != words.end(); ++iter)
{
newString.append(" ");
newString.append(*iter);
}
return newString;
}
list
不支持随机访问迭代器,因此不允许将 operator+ 与 list
一起使用,您可以使用 operator++。您必须按顺序访问列表元素,就像您使用自己的链表实现一样。
您可以使用反向迭代器来反转字符串。
#include <list>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
class Solution
{
public:
list<string> words;
void createList(string& s)
{
istringstream iss(s);
string token;
while(getline(iss, token, ' '))
{
words.push_back(token);
}
}
string reverseWords(string& s)
{
list<string>::reverse_iterator iter = words.rbegin();
string newString = "";
createList(s);
for ( ; iter != words.rend(); ++iter)
{
newString.append(" ");
newString.append(*iter);
}
return newString;
}
};
int main(int, char**)
{
string in("The sky is always blue");
Solution s;
string out = s.reverseWords(in);
std::cout << in << std::endl;
std::cout << out << std::endl;
}
我正在做一道题来颠倒字符串中单词的顺序。例如,如果您有 str1 = "the sky is blue" 那么解决方案应该是 "blue is sky the".
这是我的代码:
class Solution
{
public:
list<string> words;
void createList(string s)
{
istringstream iss(s);
string token;
while(getline(iss, token, ' '))
{
words.push_back(token);
}
}
string reverseWords(string s)
{
list<string>::iterator iter = words.begin();
string newString = "";
createList(s);
newString.append(*iter);
for (iter = (iter+1); iter != words.end(); iter++)
{
newString.append(" ");
newString.append(*iter);
}
return newString;
}
};
我的问题是.... 我是否正确使用列表迭代器?我收到一个编译器错误,提示 "Line 25: no match for ‘operator+’ " 引用了 reverseWords() 中的 for 循环。
这个编译很好,所以是的,++iter 是一个有效的语句。自增有效,跳跃无效:
list<string> words;
void createList(string s)
{
istringstream iss(s);
string token;
while(getline(iss, token, ' '))
{
words.push_back(token);
}
}
string reverseWords(string s)
{
list<string>::iterator iter = words.begin();
string newString = "";
createList(s);
newString.append(*iter);
++iter;
for (; iter != words.end(); ++iter)
{
newString.append(" ");
newString.append(*iter);
}
return newString;
}
list
不支持随机访问迭代器,因此不允许将 operator+ 与 list
一起使用,您可以使用 operator++。您必须按顺序访问列表元素,就像您使用自己的链表实现一样。
您可以使用反向迭代器来反转字符串。
#include <list>
#include <string>
#include <iostream>
#include <sstream>
using namespace std;
class Solution
{
public:
list<string> words;
void createList(string& s)
{
istringstream iss(s);
string token;
while(getline(iss, token, ' '))
{
words.push_back(token);
}
}
string reverseWords(string& s)
{
list<string>::reverse_iterator iter = words.rbegin();
string newString = "";
createList(s);
for ( ; iter != words.rend(); ++iter)
{
newString.append(" ");
newString.append(*iter);
}
return newString;
}
};
int main(int, char**)
{
string in("The sky is always blue");
Solution s;
string out = s.reverseWords(in);
std::cout << in << std::endl;
std::cout << out << std::endl;
}