首页 > 试题广场 >

字符串反转

[编程题]字符串反转
  • 热度指数:394584 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

接受一个只包含小写字母的字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)


输入描述:

输入一行,为一个只包含小写字母的字符串。



输出描述:

输出该字符串反转后的字符串。

示例1

输入

abcd

输出

dcba
#include<stdio.h>
#include<string.h>

#define N 1000

void daozhi(char *str)
{
    char *p = str+strlen(str)-1;
    char tmp;
    while(str<p)
    {
        tmp=*p;
        *p--=*str;
        *str++=tmp;
    }
}

int main()
{
    char str[N]={0};
    gets(str);
    daozhi(str);
    puts(str);
    return 0;
}
指针分别指向头尾,然后进行交换,当头==尾的时候结束。
发表于 2019-09-19 09:55:58 回复(0)
//一个用递归实现的Java解法
//二分翻转
import java.util.*;
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(Main.reverse(s));
        }
    }
    
    public static String reverse(String s){
        int len = s.length();
        if(len<=1){
            return s;
        }
        String left = s.substring(0,len/2);
        String right = s.substring(len/2,len);
        return reverse(right)+reverse(left);//右边加左边,实现递归翻转
    }
}

发表于 2018-03-26 22:07:03 回复(1)
go写法
package main
import "fmt"
func main(){
    var str string
    fmt.Scanln(&str)
    for i:=len(str);i>0;i--{
        fmt.Printf(str[i-1:i])
    }
}
发表于 2022-08-18 11:10:56 回复(0)
public class Main{
    public static void main(String []args) throws IOException{
        Scanner sc = new Scanner(System.in);
    
        while(sc.hasNext()) {
            String str = sc.next();
            for(int i = str.length() - 1; i >= 0; i--) {
                char c = str.charAt(i);
                System.out.print(c);
            }
        }

    }
}

发表于 2022-07-27 23:41:31 回复(0)
import java.util.Scanner;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        StringBuffer stringBuffer = new StringBuffer(scanner.nextLine());
        System.out.println(stringBuffer.reverse());
    }
}
发表于 2022-05-31 09:20:50 回复(0)
方法1 直接reverse
#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin >> s;
    string ans;
    reverse(s.begin(), s.end());
    ans = s;
    cout << ans;  
    return 0;
}
方法2 双指针
#include <bits/stdc++.h>
using namespace std;
int main(){
    string s;
    cin >> s;
    int left = 0, right = s.size() - 1;
    while(left < right){
        swap(s[left], s[right]);
        left++;
        right--;
    }
    cout << s;
    return 0;
}


发表于 2022-04-01 18:57:23 回复(0)
#include<stdio.h>
#include<string.h>
int main(){
    char s[1001];
    /* 注:定义的数组的容积最好比输入数据的最大长度多一些,
      否则若输入刚好占满了整个数组,系统就不能自动在数组末尾添加结束符‘\0’了,
      若是一个大项目 有时候程序就可能会出现意外bug */
    while(~scanf("%s",s)){
        int len=strlen(s);
        for(int i=len-1;i>=0;i--)
            printf("%c",s[i]);
        printf("\n");
    }
}

发表于 2021-12-28 23:22:47 回复(0)
using System;

namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {
            var input = Console.ReadLine();
            var output = "";
            for (int i = input.Length - 1; i > -1; i--)
            {
                output += input[i];
            }
            Console.WriteLine(output);
        }
    }
}

发表于 2021-09-25 13:10:37 回复(0)
#include<iostream>
#include<string>
#include<functional>
#include<algorithm>
using namespace std;
int main()
{
    string str;
    cin>>str;
    reverse(str.begin(),str.end());
    cout<<str;
    return 0;
}
发表于 2021-09-06 21:54:23 回复(0)
import java.util.*;

public class Main {
        public static void main(String[] args){
            Scanner sc=new Scanner(System.in);
            StringBuffer str=new StringBuffer(sc.nextLine());
            System.out.print(str.reverse());
        }
}

发表于 2021-04-17 21:59:12 回复(0)
法一:
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        String s = input.nextLine();
        StringBuilder sb = new StringBuilder();
        for(int i=s.length()-1; i>=0; i--){
            sb.append(s.charAt(i));
        }
        System.out.print(sb);
    }
}
法二:
import java.util.*;

public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        StringBuilder sb = new StringBuilder();
        while(input.hasNext()){
            sb.append(input.next());
        }
        System.out.print(sb.reverse());
    }
}



发表于 2021-03-08 12:03:31 回复(0)
来个C的:
#include<stdio.h>
#include<string.h>

int main() {
    char a[1000] = {0};
    while (gets(a)) {
        char buf[1000] = {0};
        unsigned long len = strlen(a);
        for (long i = 0; i < len; i++) {
            buf[len - i - 1] = a[i];
        }
        printf("%s", buf);
    }
    return 0;
}


发表于 2021-01-08 12:10:01 回复(0)
利用StringBuffer 和 String 的转换,调用String Buffer 的 reverse() 方法
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        String str = new Scanner(System.in).next();
        StringBuffer strR = new StringBuffer(str).reverse();
        System.out.println(strR);
    }
}

发表于 2020-09-30 11:17:43 回复(0)
/**
reverse()方法的调用
*/
import java.util.*;
public class Main{
        public static void main(String[] args){
                Scanner sc=new Scanner(System.in);
                while(sc.hasNext()){
                        String str=sc.nextLine();
                        if(str.length()<=1000){
                                StringBuffer sb=new StringBuffer(str);
                                sb.reverse();
                                System.out.println(sb);
                        }
                        break;
                        
                }
        }
}
发表于 2020-04-28 11:05:16 回复(0)
使用反向迭代器输出
#include <iostream>
#include <string>
using namespace std;
int main()
{
    ios::sync_with_stdio(false);
    string str;
    cin >> str;
    for (auto it = str.rbegin(); it != str.rend(); ++it)
        cout << *it;
    cout << '\n';
    return 0;
}


编辑于 2020-04-21 12:09:33 回复(0)
#include <stdio.h>
(737)#include <string.h>
#include <stdlib.h>
(794)#include <math.h>

int strlen_count(char* str); // 计算字符串的长度,包括‘\0’
                             // 但不包括‘\n’换行符

int main(void)
{
	char str[1000] = { 0 };
	int str_len = 0;

	fgets(str, 1000, stdin);

	str_len = strlen_count(str);
	for (int i = str_len; i > 0; i--)
	{
		printf("%c", str[i - 1]);
	}

	printf("\r\n");
	system("pause");

	return 0;
}

int strlen_count(char* str)
{
	int count = 0;

	while (*(str) != '\n')
	{
		str++; // 指向下一个字符
		count++;
	}

	return count;
}

发表于 2020-03-31 09:57:16 回复(0)
while(True):  # 方法1:转换为list进行操作
    try:
        s = input()
        s = list(reversed(list(s)))  # reversed返回的是迭代器,所以要加list()
        print(''.join(s))
    except:
        break

'''
while(True):  # 方法2:直接对字符串s进行reversed 操作
    try: 
        s = input()
        print(''.join(reversed(s)))
    except:
        break
'''
while(True):  # 采用字符串切片的方式
    try:
        s = input()
        print(s[::-1])
    except:
        break

1
编辑于 2020-03-28 09:46:04 回复(0)
import java.util.*;

public class Main{
    public static void main(String args[]){
        Scanner scan = new Scanner(System.in);
        while(scan.hasNext()){
            System.out.println(new StringBuffer(scan.nextLine()).reverse().toString());
        }
    }
}
发表于 2020-02-20 16:29:23 回复(0)
用a.size()函数获取字符串长度
#include<bits/stdc++.h>
using namespace std;
int main() {
	string input;
	while(cin >> input){
		for (int i = (input.size()-1); i >=0; i--) {
			cout << input[i];
		}
	}
	return 0;
}

发表于 2020-02-19 00:43:00 回复(0)
//相对较为基础,按顺序便利一哈
#include<iostream>

using namespace std;

int main(){
    string str;
    while(cin>>str){
        for(int i=str.size()-1; i>=0; i--){
            cout<<str[i];
        }
        cout<<endl;
    }
    return 0;
}

发表于 2020-02-14 16:13:25 回复(0)