力扣115--翻转字符串里的单词----istringstream类

给定一个字符串,逐个翻转字符串中的每个单词。
说明:
无空格字符构成一个 单词 。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

示例 1:
输入:“the sky is blue”
输出:“blue is sky the”

示例 2:
输入:" hello world! "
输出:“world! hello”
解释:输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:
输入:“a good example”
输出:“example good a”
解释:如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。
示例 4:

输入:s = " Bob Loves Alice "
输出:“Alice Loves Bob”

链接:https://leetcode-cn.com/problems/reverse-words-in-a-string

看完这个题目以后我就觉得很繁琐,但是我想到了这个相当于单词在后面先输出,可能是借助栈来实现,那么怎么能将每一个单词看作一个小字符串,放到栈里在弹出呢?然后就在题解中发现了这个类,百度到了一篇博客如下

istringstream 类用于执行C++风格的串流的输入操作
istringstream用空格作为字符串分隔符

#include <iostream>
#include <sstream>
#include <string>
using namespace std;

void test()
{
    
    
    {
    
    
        //istringstream iss;
        //iss.str("#123 1.23 aaa ,zzz kk,k oo.jjj");
        istringstream iss("#123 1.23 aaa ,zzz kk,k oo.jjj");
        
        cout << iss.str() << endl;

        char ch;
        iss >> ch;
        cout << ch << endl;

        int i;
        iss >> i;
        cout << i << endl;

        float f;
        iss >> f;
        cout << f << endl;

        char buf[1024];
        iss >> buf;
        cout << buf << endl;

        iss.ignore(100, ',');//ignore 忽略前100个字符或者忽略第一个逗号前面的内容包含第一个逗号,然后显示删除内容之后到第一个空格之间的字符。
        iss >> buf;
        cout << buf << endl;
    }
}

int main(int argc, char* argv[])
{
    
       
    test();
    return 0;
}

结果:在这里插入图片描述

https://www.cnblogs.com/dfyz/p/6759427.html

解题代码:

class Solution {
    
    
public:
    string reverseWords(string s) 
    {
    
    
        stack<string> stk;
        string res, temp;
        istringstream ss(s); // ss与数输入的字符串s绑定
        while (ss >> temp)   // 以空格为分隔符将其分割
        {
    
    
            stk.push(temp);
            stk.push(" ");
        }
        if(!stk.empty()) 
            stk.pop();       // 弹出最后压入的那个多余空格
        while (! stk.empty())// 单词翻转后的新串
        {
    
    
            res += stk.top();
            stk.pop();
        }
        return res;
    }
};

链接:https://leetcode-cn.com/problems/reverse-words-in-a-string/solution/ling-pi-xi-jing-tiao-zhan-ci-ti-zui-jian-u6gw/

猜你喜欢

转载自blog.csdn.net/scarificed/article/details/113220789