今天在刷题的过程看到一位大神写的代码

来源:互联网 发布:数据挖掘工具主要有 编辑:程序博客网 时间:2024/06/05 16:09

题目描述
对字符串中的所有单词进行倒排。
说明:
1、每个单词是以26个大写或小写英文字母构成;
2、非构成单词的字符均视为单词间隔符;
3、要求倒排后的单词间隔符以一个空格表示;如果原字符串中相邻单词间有多个间隔符时,倒排转换后也只允许出现一个空格间隔符;
4、每个单词最长20个字母;

输入描述:
输入一行以空格来分隔的句子

输出描述:
输出句子的逆序

输入例子:
I am a student

输出例子:
student a am I

我的代码

#include <iostream>#include <string>using namespace std;void func10(string str){    int i;    string temp;    for (int i = 0; i < str.size(); ++i)    {        if (str[i] < 'A' || (str[i] > 'Z' && str[i] < 'a') || str[i] > 'z')        {            str[i] = ' ';        }    }    while (str.size() > 0)    {        int pos = str.find_last_of(' ');        if (pos == -1)        {            temp += str;            break;        }        temp += str.substr(pos + 1);        i = pos;        if (str[i] == ' ')        {            temp += " ";            while (str[i] == ' ')            {                --i;            }        }        str = str.substr(0, i + 1);    }    cout << temp << endl;}int main(){    string str;    while (getline(cin, str))    {        func10(str);    }    return 0;}

大神代码

void deal(vector<string>&res,string& str, char delim = ' ') {    stringstream ss;    ss << str;    string tmp;    while (ss>>tmp) {        res.push_back(tmp);    }}int main() {    string str;    while (getline(cin, str)) {        vector<string> res;        for (int i = 0; i < str.size(); i++)            if (!isalnum(str[i]))                str[i] = ' ';        deal(res, str);        cout << res[res.size() - 1];        for (int i = res.size() - 2; i >= 0; i--)            cout << " " << res[i];        cout << endl;    }    return 0;}

巧妙的利用流提取符>>去掉多余的空格!
哎!自己要学的还有很多啊!

0 0
原创粉丝点击