当前位置: 首页 > article >正文

如何实现字符串反转-多语言

目录

C 语言实现

方法 1: 使用指针

方法 2: 使用递归

方法 3: 使用栈

Python 实现

方法 1: 列表反转

方法 2: 使用切片

方法 3: 使用 reversed() 函数 

方法 4: 使用递归

方法 5: 使用 for 循环

Java 实现

方法 1: 字符串转换成字符数组

方法 2: 使用 StringBuilder 的 reverse() 方法

方法 3: 使用递归方法

方法 4: 使用 Java 8 的流(Streams) 

方法 5: 使用 ArrayList 反转

Js 实现 


题目:字符串反转,如将字符串 "www.csdn.com" 反转为 "moc.ndsc.www"

C 语言实现

方法 1: 使用指针

#include <stdio.h>

void reverse(char* s) {
    // 获取字符串长度
    int len = 0;
    char* p = s;
    while (*p != '\0') { // 使用 '\0' 作为字符串结束标志
        len++;
        p++;
    }

    // 交换字符以反转字符串
    for (int i = 0; i < len / 2; i++) {
        char temp = s[i]; // 临时存储当前字符
        s[i] = s[len - 1 - i]; // 交换字符
        s[len - 1 - i] = temp; // 交换字符
    }
}

int main() {
    char s[] = "www.csdn.com"; // 定义字符串
    printf("原字符串: '%s'\n", s);
    reverse(s); // 反转字符串
    printf("反转后的字符串: '%s'\n", s);
    return 0; // 正常结束程序
}
  1. reverse 函数

    • 计算字符串的长度。
    • 使用一个 for 循环来交换字符串的字符,从头到中间进行交换,直到字符串反转完成。
  2. main 函数

    • 定义一个字符串 s
    • 打印原字符串。
    • 调用 reverse 函数反转字符串。
    • 打印反转后的字符串。

注意:

  • 在 C 语言中,字符串是以 '\0' 结尾的字符数组,因此在计算长度时使用 '\0' 作为结束标志。
  • 反转字符串的逻辑是通过交换字符实现的,确保只交换到字符串的中间部分。

方法 2: 使用递归

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

void reverse(char* s, int start, int end) {
    if (start >= end) {
        return; // 基本情况
    }
    // 交换字符
    char temp = s[start];
    s[start] = s[end];
    s[end] = temp;

    // 递归调用
    reverse(s, start + 1, end - 1);
}

int main() {
    char s[] = "www.csdn.com"; // 定义字符串
    printf("原字符串: '%s'\n", s);
    reverse(s, 0, strlen(s) - 1); // 反转字符串
    printf("反转后的字符串: '%s'\n", s);
    return 0; // 正常结束程序
}

方法 3: 使用栈

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

void reverse(char* s) {
    int len = strlen(s);
    char stack[len + 1]; // 创建一个栈
    int top = -1;

    // 将字符压入栈
    for (int i = 0; i < len; i++) {
        stack[++top] = s[i];
    }
    stack[top + 1] = '\0'; // 添加字符串结束符

    // 从栈中弹出字符
    for (int i = 0; i < len; i++) {
        s[i] = stack[top--];
    }
}

int main() {
    char s[] = "www.csdn.com"; // 定义字符串
    printf("原字符串: '%s'\n", s);
    reverse(s); // 反转字符串
    printf("反转后的字符串: '%s'\n", s);
    return 0; // 正常结束程序
}

Python 实现

方法 1: 列表反转

def reverse(s):
    # 将字符串转换为列表,因为字符串是不可变的
    s_list = list(s)
    
    # 获取字符串长度
    length = len(s_list)
    
    # 交换字符以反转字符串
    for i in range(length // 2):
        # 交换字符
        s_list[i], s_list[length - 1 - i] = s_list[length - 1 - i], s_list[i]
    
    # 将列表转换回字符串
    return ''.join(s_list)

# 主程序
if __name__ == "__main__":
    s = "www.nowcoder.com"  # 定义字符串
    print(f"原字符串: '{s}'")
    reversed_s = reverse(s)  # 反转字符串
    print(f"反转后的字符串: '{reversed_s}'")
  1. reverse 函数

    • 将输入字符串转换为列表,因为 Python 中的字符串是不可变的,不能直接修改。
    • 计算字符串的长度。
    • 使用一个 for 循环来交换字符串的字符,从头到中间进行交换,直到字符串反转完成。
    • 最后将列表转换回字符串并返回。
  2. 主程序

    • 定义一个字符串 s
    • 打印原字符串。
    • 调用 reverse 函数反转字符串,并将结果存储在 reversed_s 中。
    • 打印反转后的字符串。

方法 2: 使用切片

def reverse(s):
    return s[::-1]

# 主程序
if __name__ == "__main__":
    s = "www.nowcoder.com"  # 定义字符串
    print(f"原字符串: '{s}'")
    reversed_s = reverse(s)  # 反转字符串
    print(f"反转后的字符串: '{reversed_s}'")

方法 3: 使用 reversed() 函数 

def reverse(s):
    return ''.join(reversed(s))

# 主程序
if __name__ == "__main__":
    s = "www.nowcoder.com"  # 定义字符串
    print(f"原字符串: '{s}'")
    reversed_s = reverse(s)  # 反转字符串
    print(f"反转后的字符串: '{reversed_s}'")

方法 4: 使用递归

可以使用递归来反转字符串:

def reverse(s):
    if len(s) == 0:
        return s
    else:
        return s[-1] + reverse(s[:-1])  # 取最后一个字符并递归反转剩余部分

# 主程序
if __name__ == "__main__":
    s = "www.nowcoder.com"  # 定义字符串
    print(f"原字符串: '{s}'")
    reversed_s = reverse(s)  # 反转字符串
    print(f"反转后的字符串: '{reversed_s}'")

方法 5: 使用 for 循环

可以使用 for 循环逐个字符构建反转字符串:

def reverse(s):
    reversed_s = ''
    for char in s:
        reversed_s = char + reversed_s  # 将当前字符添加到结果的前面
    return reversed_s

# 主程序
if __name__ == "__main__":
    s = "www.nowcoder.com"  # 定义字符串
    print(f"原字符串: '{s}'")
    reversed_s = reverse(s)  # 反转字符串
    print(f"反转后的字符串: '{reversed_s}'")

Java 实现

方法 1: 字符串转换成字符数组

public class StringReverser {
    public static String reverse(String s) {
        // 将字符串转换为字符数组
        char[] sArray = s.toCharArray();
        int length = sArray.length;

        // 交换字符以反转字符串
        for (int i = 0; i < length / 2; i++) {
            // 交换字符
            char temp = sArray[i];
            sArray[i] = sArray[length - 1 - i];
            sArray[length - 1 - i] = temp;
        }

        // 将字符数组转换回字符串
        return new String(sArray);
    }

    public static void main(String[] args) {
        String s = "www.nowcoder.com"; // 定义字符串
        System.out.println("原字符串: '" + s + "'");
        String reversedS = reverse(s); // 反转字符串
        System.out.println("反转后的字符串: '" + reversedS + "'");
    }
}
  1. reverse 方法

    • 将输入字符串转换为字符数组,以便可以修改字符。
    • 计算字符数组的长度。
    • 使用一个 for 循环来交换字符,从头到中间进行交换,直到字符串反转完成。
    • 最后将字符数组转换回字符串并返回。
  2. main 方法

    • 定义一个字符串 s
    • 打印原字符串。
    • 调用 reverse 方法反转字符串,并将结果存储在 reversedS 中。
    • 打印反转后的字符串。

方法 2: 使用 StringBuilderreverse() 方法

public class StringReverser {
    public static String reverse(String s) {
        // 使用 StringBuilder 的 reverse 方法
        return new StringBuilder(s).reverse().toString();
    }

    public static void main(String[] args) {
        String s = "www.nowcoder.com"; // 定义字符串
        System.out.println("原字符串: '" + s + "'");
        String reversedS = reverse(s); // 反转字符串
        System.out.println("反转后的字符串: '" + reversedS + "'");
    }
}

方法 3: 使用递归方法

public class StringReverser {
    public static String reverse(String s) {
        // 基本情况:如果字符串为空或长度为1,直接返回
        if (s.isEmpty() || s.length() == 1) {
            return s;
        }
        // 递归调用,反转字符串
        return s.charAt(s.length() - 1) + reverse(s.substring(0, s.length() - 1));
    }

    public static void main(String[] args) {
        String s = "www.nowcoder.com"; // 定义字符串
        System.out.println("原字符串: '" + s + "'");
        String reversedS = reverse(s); // 反转字符串
        System.out.println("反转后的字符串: '" + reversedS + "'");
    }
}

方法 4: 使用 Java 8 的流(Streams) 

import java.util.stream.Collectors;

public class StringReverser {
    public static String reverse(String s) {
        // 使用 Java 8 的流反转字符串
        return s.chars()
                .mapToObj(c -> (char) c)
                .reduce("", (s1, s2) -> s2 + s1);
    }

    public static void main(String[] args) {
        String s = "www.nowcoder.com"; // 定义字符串
        System.out.println("原字符串: '" + s + "'");
        String reversedS = reverse(s); // 反转字符串
        System.out.println("反转后的字符串: '" + reversedS + "'");
    }
}

方法 5: 使用 ArrayList 反转

import java.util.ArrayList;
import java.util.Collections;

public class StringReverser {
    public static String reverse(String s) {
        // 将字符串转换为字符列表
        ArrayList<Character> charList = new ArrayList<>();
        for (char c : s.toCharArray()) {
            charList.add(c);
        }
        // 反转字符列表
        Collections.reverse(charList);
        // 将字符列表转换回字符串
        StringBuilder reversedString = new StringBuilder();
        for (char c : charList) {
            reversedString.append(c);
        }
        return reversedString.toString();
    }

    public static void main(String[] args) {
        String s = "www.nowcoder.com"; // 定义字符串
        System.out.println("原字符串: '" + s + "'");
        String reversedS = reverse(s); // 反转字符串
        System.out.println("反转后的字符串: '" + reversedS + "'");
    }
}

Js 实现 

function reverse(s) {
    return s.split('').reverse().join('');
}

const str = "www.nowcoder.com"; // 定义字符串
console.log("原字符串: '" + str + "'");
const reversedStr = reverse(str); // 反转字符串
console.log("反转后的字符串: '" + reversedStr + "'");

使用 split(), reverse(), 和 join()

这是最常见的方法,利用 JavaScript 的数组方法来反转字符串。


http://www.kler.cn/a/417512.html

相关文章:

  • 【玩转全栈】--创建一个自己的vue项目
  • ASP.NET Core 中使用依赖注入 (DI) 容器获取并执行自定义服务
  • Page Assist实现deepseek离线部署的在线搜索功能
  • 编程之路:在细节中磨砺技艺
  • 【现代深度学习技术】深度学习计算 | 延后初始化自定义层
  • 音频录制一般在什么情况下会选择保存为PCM?什么情况会选择保存为WAV?
  • CSS笔记(二)类名复用
  • SpringBoot开发——结合Nginx实现负载均衡
  • mac下安装Ollama + Open WebUI + Llama3.1
  • [高等数学]一元积分学的应用
  • (SAST检测规则-3)固定的 SessionID 缺陷详解
  • unreal engine5中多个摄像机切换
  • Hbase 部署
  • Spring项目中RabbitMq的使用(工作队列模式)
  • 2024.11.29(单链表)
  • International Journal of Medical Informatics投稿经历时间节点
  • Java基础——(三)对象和类
  • Python入门(19)--最终篇
  • Mybatis Plus 增删改查方法(一、增)
  • 09.ES13 10.ES14
  • [ACTF2020 新生赛]BackupFile--详细解析
  • eltable el-table 横向 滚动条常显
  • 05《存储器层次结构与接口》计算机组成与体系结构 系列课
  • STM32的一些知识技巧
  • 关于edu的信息收集的一次笔记分享
  • CEF127 编译指南 Linux篇 - 拉取CEF源码(五)