首页 > 试题广场 >

句子逆序

[编程题]句子逆序
  • 热度指数:493508 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”

所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符

数据范围:输入的字符串长度满足

注意本题有多组输入

输入描述:

输入一个英文语句,每个单词用空格隔开。保证输入只包含空格和字母。



输出描述:

得到逆序的句子

示例1

输入

I am a boy

输出

boy a am I
示例2

输入

nowcoder

输出

nowcoder
data=raw_input("").split()
data.reverse()
str=""
for i in range(len(data)):
    if(i<len(data)-1):
        str=str+data[i]+" "
    else:
        str+=data[i]
print str
下面是C++写的代码
#include<iostream>
#include<string>
#include<stack>
using namespace std;
int main()
{
	string str;
	stack<string>ss;
	getline(cin, str);
	//cout << str << endl;
	int len = str.length();
	string str1 = "";
	for (int i = 0; i < len; i++)
	{
		if (str[i] == ' ')
		{
			if (i + 1 < len&&str[i + 1] != ' ')
			{
				ss.push(str1);
				str1 = "";
			}
		}
		if (i == len - 1 && str1.length() != 0)
		{
			if (str[i] != ' ')
			{
				str1 += str[i];
			}
			ss.push(str1);
		}
		else
		{
			if (str[i] != ' ')
			{
				str1 += str[i];
			}
		}

	}
	while (!ss.empty())
	{
		cout << ss.top();
		ss.pop();
		if (!ss.empty())
		{
			cout << " ";
		}
	}
	//system("pause");
	return 0;
}
这段代码处理比较全,多个空格也没问题的,前面后面随意加空格也是没问题的哈

编辑于 2016-07-03 23:05:31 回复(0)
import java.util.*;
public class Main {
    public static void main(String args[]){
        Scanner cin=new Scanner(System.in);
        while(cin.hasNext()){
            String s=cin.nextLine();
            String[] array=s.split("[^a-zA-Z]");
            List<String> list= Arrays.asList(array);
            Collections.reverse(list);
            for(String each:list.subList(0,list.size()-1)){
                System.out.print(each+" ");
            }
            System.out.println(list.get(list.size()-1));
        }
    }
}

发表于 2016-03-27 20:47:10 回复(0)
get_str = input()
print(' '.join(get_str.split(' ')[::-1]))

发表于 2022-07-18 23:57:01 回复(0)
a=input()
lis=a.split()
for i in lis[::-1]:
    print(i,end=' ')

发表于 2022-03-21 13:00:18 回复(0)
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;
    getline(cin,s1);
    s1=s1+' ';
    int end=s1.length()-1;
    for(int i=s1.length()-1;i>=0;i--)
    {
        if(s1[i]==' ') 
        {
            for(int j=i+1;j<=end;j++)
            {
                cout<<s1[j];
            }
            end=i;
        }
    }
    for(int j=0;j<=end;j++)
    {
        cout<<s1[j];
    }
}

发表于 2022-03-06 16:42:53 回复(0)
#include<stdio.h>
#include<string>
#include<map>
#include<iostream>
#include<math.h>
using namespace std;
int main(){
    string strs;
    getline(cin,strs);
    for(int i = strs.length()-1;i>=0;i--){
       if(strs[i]==' ' ){
           int j =i;
           while(strs[j+1]!=' ' && strs[j+1]!='\0'){
               cout<<strs[j+1];
               j++;
           }
           cout<<strs[i];
       }
    }
       int start=0;
        while(strs[start]!=' ') {
            cout<<strs[start];
        start++;
        }
}

发表于 2022-02-23 21:00:32 回复(0)
import java.util.*;

public class Main{
    public static void main(String args[]){
        Scanner sc = new Scanner(System.in);
        String str = sc.nextLine();
        String[] strArr = str.split("\\s+");
        StringBuilder sb = new StringBuilder();
        int len = strArr.length-1;
        for(int i = len; i >= 0; i--){
            if(i==len){
                sb.append(strArr[i]);
            }else{
                sb.append(" "+strArr[i]);
            }
        }
        System.out.println(sb);
    }
}

发表于 2022-02-18 00:16:34 回复(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();
            int len = str.length();
            String[] s=str.split(" ");
            StringBuilder sb = new StringBuilder();
            for (int i = s.length-1; i >=0; i--) {
                sb.append(s[i]+" ");
            }
            System.out.println(sb.substring(0, len));
    }
    }
}

发表于 2022-02-10 16:24:54 回复(0)
#include<stdio.h>
#include<string.h>
int main(){
    char a[1000],p[1000][1000];
    int i=0; 
    while(~scanf("%s",a)){
        strcpy(p[i++],a);
    }
    i--;
    for(;i>=0;i--)printf("%s ",p[i]);
}
发表于 2022-01-03 18:22:56 回复(1)
print(*(i for i in input().strip().split( " ")[::-1],end=" ")
发表于 2021-10-12 14:30:36 回复(1)
def ReverseWord(string):
    lst = string.split()[::-1]
    for i in lst:
        print(i,end=' ')
if __name__=='__main__':
    s = input()
    ReverseWord(s)

发表于 2021-09-06 13:48:22 回复(0)
import java.util.*;
//从后往前遍历用双指针截取单词
public class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        char[] c = s.toCharArray();
        StringBuilder res = new StringBuilder();
        int j = s.length()-1,i = j;
        while(i >= 0){
            while(i >= 0 && s.charAt(i)!= ' ') i--;//搜索首个空格
            res.append(s.substring(i+1, j+1) + ' ');//添加单词
            while(i >= 0 && s.charAt(i) == ' ') i--;//跳过单词间空格
            j = i;
        }
        System.out.println(res.toString().trim());//最后添加的一个单词有空格
    }
}

发表于 2021-08-24 03:43:19 回复(0)
print(' '.join(input().split()[::-1]))
输入句子,用默认方法分割(空格分割),
然后将分隔后的结果逆序,使用join函数重新以空格连接各元素,
最后输出结果

发表于 2021-08-23 20:30:24 回复(0)
#include<stdio.h>
#include<string.h>

int main()
{
    char str[1000] = {0};
    while(gets(str)) {
        int end = strlen(str) - 1;

        char tmpstr[100] = {0};
        for(int bgn=strlen(str)-1; bgn>=-1; bgn--) { 
            if(bgn == -1 || str[bgn] == ' ') {
                strncpy(tmpstr, &str[bgn+1], end-bgn);  // 截取单词输出
                tmpstr[end-bgn] = '\0';
                printf("%s", tmpstr);
                if (bgn != -1)
                    printf(" ");
                end = bgn - 1;
            }
        }
    }
    return 0;
}
发表于 2021-08-01 13:20:41 回复(0)
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
using namespace std;

int main(){
    string str;
    while(getline(cin,str)){
        vector<string> vec;
        stringstream ss;
        ss<<str;
        while(ss>>str){
            vec.push_back(str);
        }
        
        for(auto it=vec.rbegin();it!=vec.rend();++it){
            cout<<*it<<' ';
        }
        cout<<endl;
    }
}

发表于 2021-07-27 23:21:02 回复(0)
s_list = input().split()
s_list.reverse()
print(' '.join(s_list))

发表于 2021-06-24 18:37:02 回复(0)
在c语言里面逐个把词压栈,然后逐个出栈可以解决。
在java里面使用StringBuffer.reverse()可以逆序字符串。
思想:
1、把句子保存到StringBuffer sb里面进行StringBuffer.reverse()
2、然后使用sb.toString()转为字符串str
3、使用String.split()函数根据空格转为字符串数组,也就是分词
4、再把str数组出入到sb里面使用StringBuffer.reverse()函数进行逆序
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
       Scanner in = new Scanner(System.in);
        while(in.hasNext()){
            StringBuffer str = new StringBuffer();
            String[] split = str.append(in.nextLine()).reverse().toString().split(" ");
            for (String s :split){
                str.setLength(0);
                str.append(s);
                System.out.print(str.reverse()+" ");
            }
        }
    }
}


发表于 2021-05-09 14:35:10 回复(0)
c++ 
#include<iostream>
using namespace std;
int main()
{
    string str[1000];
    int i=0;
    while(cin >> str[i])
        i++;
    for(i-=1;i>=0;i--)
        cout << str[i] << " ";
}

编辑于 2021-03-31 21:01:44 回复(0)
console.log(readline().split(' ').reverse().join(' '))
发表于 2021-03-08 11:41:42 回复(0)
import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner br = new Scanner(System.in);
        while(br.hasNextLine()){
            String str = br.nextLine();
            String[] s = str.split(" ");
            for (int i = s.length-1; i >=0; i--) {
                System.out.print(s[i]);
                if(i != 0){
                    System.out.print(" ");
                }
            }
        }
    }
}
发表于 2021-02-22 16:14:12 回复(0)