• 1009 说反话(字符串、栈)


    题目:

    给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出。

    输入格式:

    测试输入包含一个测试用例,在一行内给出总长度不超过 80 的字符串。字符串由若干单词和若干空格组成,其中单词是由英文字母(大小写有区分)组成的字符串,单词之间用 1 个空格分开,输入保证句子末尾没有多余的空格。

    输出格式:

    每个测试用例的输出占一行,输出倒序后的句子。

    输入样例:

    Hello World Here I Come
    

    输出样例:

    Come I Here World Hello
    

    思路:

            第一反应是这样的:getline接收这句话,遍历该字符串,将所有空格的下标记入一个vector,然后遍历vector,用substr截取字符串,组合成一个新字符串。需要注意的是,要考虑到没有空格也就是vector为空的情况,不然会出现段错误。          心里清楚这肯定不是最好的办法,所以看了一下网上别人的解法:逆序输出,会想到这个数据结构。然后就把每个单词看做一个字符串,按顺序放到里去。输出的时候依次出栈,就好了。 之前我没有用过c++里面的stack,所以也没想到这种操作。在下面把两种代码都贴上。

    知识点for me:

    1、有几个测试点是段错误,可能是因为没有考虑0或者边界值的情况,比如对于一个空数组却访问了arr[0]。

     2、

    #include <iostream>
    #include <stack>
    using namespace std;
    int main() {
     stack<int> s; // 定义⼀个空栈s
     for (int i = 0; i < 6; i++) {
     s.push(i); // 将元素i压⼊栈s中
     }
     cout << s.top() << endl; // 访问s的栈顶元素
     cout << s.size() << endl; // 输出s的元素个数
     s.pop(); // 移除栈顶元素
     return 0;
    }
    

    上代码:

    字符串的方法:

    #include <iostream>
    #include <vector>
    #include <string>
    using namespace std;;
    
    int main()
    {
        string s,cut,ans;
        getline(cin,s);
        vector<string> v;
        vector<int> k;
        for(int i=0;i<s.length();i++)
        {
            if(s[i]==' '){
                k.push_back(i);
            }
        }
        if(k.size()==0)//k为空 
        {
            cout<<s;
            return 0;
        }
        ans=s.substr(k[k.size()-1]+1);
        for(int i=k.size()-2;i>=0;i--)
        {
            ans+=s.substr(k[i],k[i+1]-k[i]);
        }
        ans+=" ";
        ans+=s.substr(0,k[0]);
        cout<<ans;
        return 0;
    }

     使用stack:

        #include <iostream>
        #include <stack>
        using namespace std;
        int main() {
            stack<string> v;
            string s;
            while(cin >> s) {
                v.push(s);
            }
            cout << v.top();
            v.pop();
            while(!v.empty()) {
                cout << " " << v.top();
                v.pop();
            }
            return 0;
        }
  • 相关阅读:
    Could note find result map com.xxxx.entity.UserAccountDO
    浏览器通过file://访问文件和通过http://访问文件有什么区别
    FreeMarker template error: The following has evaluated to null or missing: ==> blogger.md [in template "admin/about.ftl" at line 44, column 84]
    2018-01-03 --活动观赏鱼的2017总结及2018年展望
    eclipse open call hierarchy无效
    Mysql 查询重复的记录
    oracle用户、权限操作
    Oracle 修改表操作
    Python 魔法方法详解
    Python __dict__和vars()
  • 原文地址:https://www.cnblogs.com/littleLittleTiger/p/10561489.html
Copyright © 2020-2023  润新知