字符串操作,包括查找,字串等函数;
用vector存储每个单词;
注意:1.string类型对象,不能通过修改中间某个字符为'\0'达到修改字符串大小;而char s[],可以通过类似修改,达到用printf 或cout 输出部分字符;
2.反向迭代器的使用;
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Solution {
public:
void reverseWords(string &s) {
string retStr="";
string nullstr = " ";
vector<string> strvec;
for(int i=0 ; i<s.length() ; i++){
string tempStr;
int j = i;
while(s[j] != ' ' && s[j]!='\0'){
j++;
}
tempStr=s.substr(i,j-i);
i = j;
if(tempStr.length() != 0){ //!!没有单词时不需要存储
strvec.push_back(tempStr);
}
}
//!!反向迭代器
for(vector<string>::reverse_iterator it=strvec.rbegin() ; it != strvec.rend() ; it++){
retStr.append(*it);
retStr.append(nullstr);
}
s = retStr.substr(0,retStr.length()-1);
}
};
int main()
{
string s = "a";
// string s = " ";
// cout << s << endl;
Solution A;
A.reverseWords(s);
cout << s << " " << s.length() << endl;
// string s = "hello";
// cout << s << endl;
// s[2] = '\0';
// cout << s << endl;
//
// char s[] = "hello";
// cout << s << endl;
// s[2] = '\0';
// cout << s << endl;
return 0;
}
不用vector代码:
class Solution {
public:
void reverseWords(string &s) {
string retStr="";
string nullstr = " ";
vector<string> strvec;
for(int i=0 ; i<s.length() ; i++){
string tempStr;
int j = i;
while(s[j] != ' ' && s[j]!='\0'){
j++;
}
tempStr=s.substr(i,j-i);
i = j;
if(tempStr.length() != 0){
string s1 = " ";
tempStr.append(s1);
tempStr.append(retStr);
retStr = tempStr;
}
}
s = retStr.substr(0,retStr.length()-1);
}
};