首页 > 试题广场 >

倒置字符串

[编程题]倒置字符串
  • 热度指数:37091 时间限制: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
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main(){
    string s;
    vector<string> temp;
    while(cin >> s){
        temp.push_back(s);
    }
    reverse(temp.begin(),temp.end());
    cout << temp[0];
    for(int i=1;i<temp.size();i++){
        cout << ' ' << temp[i];
    }
    cout << endl;
    return 0;
}
发表于 2018-11-07 11:39:51 回复(0)
更多回答
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)
¬头像 ¬
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]+" ");
		}
	}
}

发表于 2017-02-21 12:04:51 回复(6)
//本题可以用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)
var readline = require('readline');
const rl = readline.createInterface({
        input: process.stdin,
        output: process.stdout
});
rl.on('line', function(line){
   var lines = line.split(' ');
   var str = lines.reverse().join(' ');
   console.log(str);    
});

发表于 2017-08-08 21:05:52 回复(0)
"""
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 <stdio.h>  
#include <string.h>  
  
int main()  
{  
    int i = 0, j = 0;  
    int begin = 0, end = 0;   
    char tmp;  
char str[100]={0};
gets(str);
 
    //第一步:全部翻转  
    j = strlen(str) - 1;  
    while(j > i)  
    {  
        tmp = str[i];  
        str[i] = str[j];  
        str[j] = tmp;  
        j--;  
        i++;  
    }  
 
    //第二步:将每个空格隔开的单词翻转  
    i = 0;  //i = 0不能丢,要从头开始  
    while(str[i])  
    {  
        if(str[i] != ' ')  
        {  
            begin = i;  
            while(str[i] && str[i] != ' ')  
            {  
                i++;  
            }  
            i = i - 1;  //得到最后一个字符的数组下标
            end = i;  
        }  
          
        while(end > begin)  
        { 
           tmp = str[begin];  
            str[begin] = str[end];  
            str[end] = tmp;  
            end--;  
            begin++;  
        }  
          
        i++;  
    }  
      
    printf("%s\n", str);  
      
    return 0;  
}  
发表于 2017-03-01 16:17:22 回复(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)