/* 本文系「人工智能安全」(微信公众号)原创,转载请联系本文作者(同博客作者)。 欢迎你转发分享至朋友圈,并给予「关注、星标、点赞」三连支持。互相欣赏,互相批判。 我是一名有诗人气质的网络安全工程师 期待与你的思想交流碰撞出智慧的花火 水木清华 2020-03-16 [中级]单词倒排 */ #include <iostream> #include <vector> #include <string> using namespace std; //单词倒排的函数接口 int Word_Rev_Sort(string str) { vector <string> vec; //用向量来存储单词 int len = str.size(); //获取字符串的长度 int sublen = 0; //记录每个子字符串(单词)的长度 //将句子中的单词分割,并将除最后一个单词之外的单词写入向量(如句子包含多个单词时) for(int i = 0; i < len; i++) { if(((str[i] >= 'a') && (str[i] <= 'z')) || ((str[i] >= 'A') && (str[i] <= 'Z'))) { sublen++; continue; } else { if (sublen > 0) { vec.push_back(str.substr(i - sublen, sublen)); //将单词写入向量 sublen = 0; //重置单词的长度,记录下一个新单词的长度 } } } //将最后一个单词写入向量,当句子仅有一个单词时同样适用 if (sublen > 0) { vec.push_back(str.substr(len - sublen, sublen)); //将单词写入向量 } //倒序输出单词,并用空格隔开,形成单词倒排的句子 for (int i = vec.size() - 1; i > 0; i--) { cout << vec[i] << ' '; } cout << vec[0] << endl; return 0; } //主函数 int main () { string str; while (getline(cin, str)) { Word_Rev_Sort(str); } return 0; }