首页 > 试题广场 >

倒置字符串

[编程题]倒置字符串
  • 热度指数:39306 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
将一句话的单词进行倒置,标点不倒置。比如 I like beijing. 经过函数后变为:beijing. like I

输入描述:
每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100


输出描述:
依次输出倒置之后的字符串,以空格分割
示例1

输入

I like beijing.

输出

beijing. like I
import java.util.*;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String[] s = sc.nextLine().split(" ");
        StringBuilder res = new StringBuilder();
        for(int i = s.length - 1; i >= 0; i--) {
            res.append(s[i]).append(" ");
        }
        String re = res.toString().trim();
        System.out.println(re);
    }
}

发表于 2017-08-15 15:35:20 回复(1)
//本题可以用vector 也可以用 stack
//本题利用栈——先进后出的原则+cin流输入——遇空格就读入之前的内容的特性
#include <iostream>
#include <string>
#include <stack>
using namespace std;
int main()
{
    string str;
    stack<string>si;
    int flag=1;//首位标示符
    while(cin>>str)
    {
        si.push(str);//入栈
    }
    while(!si.empty())
    {
        if(flag)
        {
            cout<<si.top();
            flag=0;
        }
        else
            cout<<" "<<si.top();
        si.pop();
    }
    cout<<endl;
    return 0;
}

发表于 2017-10-13 00:08:46 回复(0)
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

int main(){
    string str;
    while(getline(cin,str)){
        reverse(str.begin(),str.end());
        int i=0,j=i;
        while(i<str.size()){
            while(i<str.size()&&str[i]==' ')
                ++i;
            j=i;
            while(i<str.size()&&str[i]!=' ')
                ++i;
            reverse(str.begin()+j,str.begin()+i);
            j=i;
        }
        cout<<str<<endl;
    }
    return 0;
}

发表于 2017-08-11 21:24:07 回复(1)
#include<iostream> 
#include<string> 
#include<vector> 
using namespace std; 

int main() 
{
    string str;
    while(getline(cin,str))
     {
        int length=str.length();
        string temp;
        vector<string> vec;
        for(int i=0;i<length;i++)
         {
             if(str[i]!=' ')
                 temp.push_back(str[i]);
             else
               {
                 vec.push_back(temp);
                 temp.clear();            //这里一定要清除
               }
         }
        vec.push_back(temp);        //需要把最后一个单词压入到vec中
        for(int j=vec.size()-1;j>0;j--)  //倒序输出
            cout<<vec[j]<<' ';
        cout<<vec[0]<<endl;
     }
}

发表于 2017-07-23 15:26:24 回复(2)
"""
python 1 分钟搞定
"""
import re
output = ""
input_val = raw_input()
input_list = re.split(" ",input_val)
input_list.reverse()
length = len(input_list)
fornum in range(0,length):
output = output + input_list[num]+" "
print (output[:-1])

编辑于 2017-04-01 09:49:57 回复(0)
先将字符串逆置
再将每个单词逆置
#include <iostream>
#include <string>
#include <algorithm>

using namespace std;

int main(){
    string str;
    getline(cin, str);
    reverse(str.begin(), str.end());
    auto start = str.begin();
    while(start != str.end()){
        auto end = start;
        while(end != str.end() && *end != ' '){
            ++end;
        }
        reverse(start, end);
        if(end != str.end()){
            start = end + 1;
        }
        else{
            start = end;
        }
    }
    cout << str << endl;
    return 0;
}
第二种方式是通过cin遇到空格就结束来分割,要用到string重载的加号+
#include <iostream>
#include <string>

using namespace std;

int main(){
    string s1, s2;
    cin >> s1;
    while(cin >> s2){
        s1 = s2 + ' ' + s1;
    }
    cout << s1 << endl;
    return 0;
}
编辑于 2020-05-28 17:47:05 回复(0)
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;

void Reserve(string& s)
{
    reverse(s.begin(),s.end());
    auto it = s.begin();
    auto start = it;
    while (it != s.end())
    {
        if (*it == ' ')
        {
            reverse(start,it);
            start = ++it;
        }
        else
            it++;
    }
    reverse(start,it);
}
int main()
{
    string s;
    while (getline(cin, s))
    {
        Reserve(s);
        cout << s << endl;
    }
    return 0;
}
发表于 2019-11-09 22:53:22 回复(0)
#include <bits/stdc++.h>
using namespace std;
int main()
{
    stack<string> str;
    string word;
    while(cin>>word)
    {
        str.push(word);
    }
    while(str.size()!=1)
    {
        cout<<str.top()<<" ";
        str.pop();
    }
    cout<<str.top()<<endl;
    return 0;
}

直接用栈
发表于 2019-04-20 18:52:55 回复(0)
#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
    vector<string> v;
    string s;
    while(cin>>s){
        v.push_back(s);
    }
    for(int i=v.size()-1;i>0;i--)
        cout<<v[i]<<" ";
    cout<<v[0]<<endl;
    return 0;
}
发表于 2018-10-10 10:40:36 回复(3)
// 整体的思路即为从后往前遍历,遇到单词便其放到res中
#include<iostream>
#include<cctype>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

int main()
{
    string s;
    getline(cin, s);
    string res;
    int l = s.size() - 1, r = s.size() - 1;

    for(int i = s.size() - 1; i >= 0; i--)
    {
     if(i > 0 && s[i] != ' ' && s[i - 1] != ' ')
         l--;
     else
     {
         res += s.substr(l, r - l + 1);
         l = i - 1;
         r = l;
     }
     }

     cout << res;
     return 0;
}
编辑于 2018-08-26 10:45:03 回复(0)
obj=[x for x in input().split()]
print(' '.join( obj[::-1]))


发表于 2018-05-28 11:09:49 回复(0)
#include <vector>
#include <string>
#include <iostream>
using namespace std;

int main() {
    vector<string> res;
    string str;
    getline(cin, str);
    int len = str.length();
    int startPos = 0;
    for (int i = 0; i < len; i++) {
       if (str[i] == ' ') {
           res.push_back(str.substr(startPos, i-startPos));
           // 过滤连续空格,提高连续空格的字符串处理效率 
           while (i < len - 1 && str[i+1] == ' ') {
               i++;
           }
           startPos = i+1;
       }
    }
    res.push_back(str.substr(startPos));
    int size = res.size();
    for (int i = size - 1; i >= 0; i--) {
        if (i != size - 1) {
            cout << " ";
        }
        cout << res[i];
    }
    return 0;
}

发表于 2018-05-08 18:21:28 回复(0)
import java.util.Scanner;

public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String inputString = sc.nextLine();
String[] numbers = inputString.split(" ");
for(int i = numbers.length-1;i>=0;i--){
if(i == 0){
System.out.println(numbers[i]);
}else{
System.out.print(numbers[i]+" ");
}
}
}
}
编辑于 2018-04-10 16:38:39 回复(0)
#include <iostream>

using namespace std;

int main()
{     string s;     getline(cin, s);     for(int i=s.length()-1;i>=0;i--)     {         if(s[i]==' ' || i==0)         {             int t = (i==0)?i:i+1;             for(;s[t]!=' ' && s[t]!='\0';t++)                 cout<<s[t];             if(i!=0)                 cout<<" ";         }     }     return 0;
}

发表于 2018-01-16 01:11:03 回复(0)
import java.util.*;
public class Main{
public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
        String str = scan.nextLine();
        String[] string = str.split(" ");
        for(int i=0;i<string.length;i++){
            System.out.print(string[string.length-i-1]);
            if(i!=string.length-1){
                System.out.print(" ");
            }
        }
    }
}

发表于 2018-01-01 13:37:59 回复(0)
import java.util.Scanner;

public class WordReverse {
    public static void main(String[] args){

        Scanner input=new Scanner(System.in);
        String s1=input.nextLine();
        String[] s2=s1.split(" ");
        for (int i=s2.length-1;i>=0;i--){
            System.out.print(s2[i]+" ");
            }
    }
}
发表于 2017-11-01 20:15:47 回复(0)
//总体思路:
//1、先将整个字符串颠倒
//2、再将以空格分割的各个字符串颠倒
#include<bits/stdc++.h>
using namespace std;
//颠倒字符串
void swap(string &s)
{
    int len=s.length();
    for(int i=0;i<len/2;i++)
    {
       char c;
       c=s[i];
       s[i]=s[len-1-i];
       s[len-1-i]=c;
    }
}
int main()
{
    string s;
    getline(cin,s);
    swap(s);
    int spacenum=0;
    int len=s.length();
    for(int i=0;i<len;i++)
    {
        if(s[i]==' ')
            spacenum++;
    }
    spacenum++;//记录字符串个数,包括最后一个空格之后的
    int start=0;//每个字符串的第一个字符下标
    for(int i=0;i<=len;i++)
    {
        if(s[i]==' '||s[i]=='\0')
        {
            string str=s.substr(start,i-start);//截取每个字符串
            swap(str);//进行字符串颠倒
            start=i+1;
            cout<<str;
            spacenum--;
            if(spacenum!=0)
                cout<<' ';
            else
                cout<<endl;
        }
    }
}

发表于 2017-10-10 21:15:34 回复(0)











#include <iostream>

#include <cstring>

#include <algorithm>

#include <cmath>

#include <sstream>

using namespace std;

const int maxn = 105;

string res[maxn];

string p;

int main()

{

    getline(cin, p);

    stringstream ss;

    ss << p;

    int count = 0;

    while(!ss.eof()) {

        ss >> res[++count];

    }

    for(int i = count; i > 0; i--) {

        cout << res[i];

        i == 1 ? cout << endl : cout << " ";

    }

    return 0;

}


发表于 2017-09-11 15:13:31 回复(0)
// 思路挺简单的,以空格为分界符,将每个单词倒置一下
// 然后将整个字符串倒置一下,因此关键的步骤就是倒置。
import java.util.Scanner;
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String str = sc.nextLine();
            char[] ch = str.toCharArray();
            int index = 0;
            for(int i=0;i<ch.length;i++){
                if(ch[i]==' '){
                    invert(ch,index,i-1);
                    index = i+1;
                }else if(i==ch.length-1){
                	invert(ch, index, i);
                }
            }
            invert(ch,0,ch.length-1);
            System.out.println(String.valueOf(ch));
        }
    }
    public static void invert(char[] ch, int start, int end){
        char c;
        while(start<end){
            c  = ch[start];
            ch[start] = ch[end];
            ch[end] = c;
            start++;
            end--;
        }
    }
}


发表于 2017-09-05 21:37:51 回复(0)
#include <iostream>
#include <string>
using namespace std;
int main(){
	string s;
	getline(cin,s);
	for(int i=s.size()-1;i>=0;i--){
		if(s[i]==' '||i==0){
			int idx=(i==0)?i:i+1;
			for(;s[idx]!=' '&&s[idx]!='\0';idx++){
				cout<<s[idx];
			}
			if(i!=0) cout<<" ";
		}
	}
	return 0;
}

发表于 2017-08-26 23:17:13 回复(0)