首页 > 试题广场 > 字符串倒序
[编程题]字符串倒序
  • 热度指数:2066 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
薯队长带着小红薯参加密室逃脱团建游戏,首先遇到了反转游戏,小红薯们根据游戏提示收集了多个单词线索,并将单词按要求加一个空格组 成了句子,最终要求把句子按单词反转解密。 说明:收集的时候单词前后可能会有多个空格,反转后单词不能有多个空格,具体见输入输出样例。

输入描述:
输入一个字符串。包含空格和可见字符。长度<=100000。 


输出描述:
输出一个字符串,表示反转后结果。
示例1

输入

the	sky	is												blue!

输出

blue! is sky the

备注:
输出一个字符串,表示反转后结果。 
function reverseStr (str) {
    var s = str.match(/[^\s]+/g)
    s = s.reverse()
    return s.join(' ')
}
发表于 2020-06-12 13:46:09 回复(2)
words = input().split()[::-1]
print(" ".join(words))


发表于 2020-07-04 12:19:05 回复(2)
#include <iostream>
#include <string>

using namespace std;
 
int main(){
    string str;
    getline(cin,str);
    string ans="";
    int n=str.size();
    int i=n-1,j=n-1;
    while(j>=0){
        if(str[j] != ' '){
            for(i=j;i>=0;i--){
                if(str[i] == ' ')
                    break;
            }
            ans+=str.substr(i+1,j-i);
            ans+=" ";
            j=i;
        }
        j--;
    }
    ans.erase(ans.end()-1);
    cout<<ans<<endl;
    return 0;
}

编辑于 2020-09-15 11:24:02 回复(0)
✭头像
import sys
s = [i for i in sys.stdin.readline().split()]
for i in range(len(s)-1, -1, -1):
    print(s[i], end=' ')

发表于 2020-06-13 12:25:21 回复(0)
import java.util.*;
public class Main{
public static void main(String[] args)
{
    Scanner in=new Scanner(System.in);
    String str=in.nextLine();
    List<String> words=Arrays.asList(str.split("\\s+"));
    Collections.reverse(words);
    String res=String.join(" ", words);
    System.out.print(res);
}
}

发表于 2020-06-29 19:46:04 回复(0)
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;
 
int main(){
    //the sky is blue!
    //!eulb si yks eht

    string t, dst, src;
    while(cin >> t){
        src += t;
        src += ' ';
    }
    src = src.substr(0, src.length() - 1);  //丢掉最后一个空格
    reverse(src.begin(), src.end());
    int pos1 = 0;  //第一次出现空格的位置
    int pos2 = 0;  //第一次出现字符的位置
    while((pos1 = src.find_first_of(' ')) != string::npos){
        pos2 = src.find_first_not_of(' ');
        string temp = src.substr(pos2, pos1); //截取一个单词
        reverse(temp.begin(), temp.end());    //翻转
        temp += ' ';                          //加上空格
        dst += temp;                          //赋值到目标字符串
        src = src.substr(pos1 + 1);           //更新src
    }
    //找不到空格了, 说明已经到了最后一个单词了
    reverse(src.begin(), src.end());
    dst += src;
    cout << dst << endl;
    return 0;
}

发表于 2020-11-29 14:06:33 回复(0)
通过了所有测试案例:
  1.     不知道为什么直接用if判断空格删不干净,最后只能用编码判断空格了
  2.     核心语句:
  !Number.isNaN(   item.charCodeAt(0)   )   end.unshift(item);
  3.    关于charCodeAt(0):
  • 自己输入的空格,返回结果是32,console.log('space::   ',' '.charCodeAt(0))  //32
  • 命令行输入的空格,返回结果是NaN,故非NaN的添加到数组头中
  • 为什么不直接:返回结果是NaN,则splice(index,1)删除item,因为删不干净

const readline=require('readline');
const rl=readline.createInterface({
    input:process.stdin,
    output:process.stdout
});
rl.on('line',(line)=>{
    let arr=line.split(' '),brr=[];
    
    arr.forEach((item,index)=>{
        if( !Number.isNaN(item.charCodeAt(0))){//非NaN的添加到数组头中
            brr.unshift(item);
        }
    })
    console.log(brr.join(' '));
})





编辑于 2020-11-08 08:32:02 回复(0)
while(str=readline()){

    str = str.replace(/\s+/g," ").split(" ")
    var arr=[];
    var len=str.length;
    for(var i=0;i<len;i++){
        arr[i]=str.pop()
    }
    print(arr.join(' '))

}

牛客通过90%,自己编译器全通过

发表于 2020-10-19 14:01:31 回复(0)
#include<stdio.h>
#include<string.h>

int main()
{
    char a[100000];
    char b[100000];
    int counter=0;
    gets(a);
    for(int i=0;i<strlen(a);i++)//去掉多余的空格并存放在新数组b中
    {
        if(a[i]!=32)
        {
            b[counter]=a[i];
            counter++;
        }
        if(a[i]==32&&a[i+1]!=32)
        {
            b[counter]=a[i];
            counter++;
        }
    }
    int counter2=counter;
    for(int i=counter-1;i>=0;i--)//逆序遍历,打印空格后单词
    {
        if(b[i]==32)
        {
            for(int j=i+1;j<counter2;j++)
                printf("%c",b[j]);
            counter2=i;
            printf(" ");
        }
    }
    for(int j=0;j<counter2;j++)//打印第一个单词
        printf("%c",b[j]);
}

编辑于 2020-10-14 19:17:07 回复(0)
怎样才能通过呢😐直接写函数不能过编译诶
发表于 2020-06-20 12:05:58 回复(3)
90%到底是为啥呀,输出也显示不完
发表于 2020-11-27 19:56:05 回复(0)
    function reverseV(str){
        let arr = []
        str.split(" ").forEach((val,idx)=>{
            if (val != ''){
                arr.push(val)
            }
        })
        return  arr.reverse().join(' ')
    }

为什么会错啊,一个都通过不了就离谱
发表于 2020-10-28 13:24:56 回复(0)
import java.util.Scanner;
public class Main {
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        while(sc.hasNext()){
            String s = sc.nextLine();
            System.out.println(reverse(s));
        }
    }

    public static String reverse(String s){
        String[] str = s.split("\\s+");//表示一个或多个空格的正则表达式
        StringBuilder sb = new StringBuilder();
        for (int i = str.length - 1; i > 0; i--) {
           sb.append(str[i]).append(" "); 
        }
        sb.append(str[0]);
        return sb.toString();
    }
}

发表于 2020-09-02 15:38:40 回复(0)
#include<iostream>                     //用栈先进后出
#include<string>
#include<stack>
using namespace std;
int main()
{
    string s;
    getline(cin,s);
    stack<string> res;
    string temp;
    for(int i=0;i<s.size();i++)
    {
        if(s[i]!= ' ')
        {
            temp+=s[i];
        }
        else 
        {
            if(temp.size()>0)
            {
                res.push(temp);
                temp="";
            }
        }
    }
        if (temp.size()>0)
    {
        res.push(temp);
    }
   while(!res.empty())
   {
       cout<<res.top();
       res.pop();
       if(!res.empty())
           cout<<" ";
   }
    return 0;
}
发表于 2020-08-28 22:49:42 回复(0)
let text = readline();
let key = text.match(/\S+/g);
let ckk = key.reverse().join(' ');
print(ckk);

为啥只通过百分之90
发表于 2020-08-24 15:09:15 回复(0)
usingnamespace std;
#include <stack>
#include <iostream>
#include <string.h>
intmain()
{
    string a[100000];
    string s;
    inti=0;
    stack <string>q;
    while(cin>>s)
    {
       a[i++]=s;
    }
    for(intj=0;j<i;j++)
    {
        q.push(a[j]);
    }
    for(intj=0;j<i;j++)
    {
        cout<<q.top()<<" ";
        q.pop();
    }
}
发表于 2020-08-22 09:20:42 回复(0)
#include <bits/stdc++.h>
using namespace std;
stack<string> s;
  
int main(int argc, char**argv) {
    string str;
    while(cin >> str) {
        s.push(str);
    }
    while(s.size())
    {
        string res = s.top();
        s.pop();
        cout << res << " ";
    }
   
      
    return 0;
}

发表于 2020-08-11 13:04:32 回复(0)
while(sentence=readline()){
    print(test(sentence))
}
function test(sentence) {
    let words = []
    let result = null
    const reg = /\S+/g
    while (result = reg.exec(sentence)) {
        words.push(result[0])
    }
    return words.reverse().join(' ')
}
为啥只能通过90%啊
发表于 2020-07-29 11:54:11 回复(0)
var a = readline()
a.indexOf('  ') 永远是 -1 这是为啥呢
发表于 2020-07-15 16:28:10 回复(0)
写一个函数 放上去 根本通过不了 说是输出为空 明明有return啊 要写啥准备工作的语句吗?
发表于 2020-07-06 19:56:36 回复(0)