如何实现字符串反转-多语言
目录
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; // 正常结束程序
}
-
reverse
函数:- 计算字符串的长度。
- 使用一个
for
循环来交换字符串的字符,从头到中间进行交换,直到字符串反转完成。
-
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}'")
-
reverse
函数:- 将输入字符串转换为列表,因为 Python 中的字符串是不可变的,不能直接修改。
- 计算字符串的长度。
- 使用一个
for
循环来交换字符串的字符,从头到中间进行交换,直到字符串反转完成。 - 最后将列表转换回字符串并返回。
-
主程序:
- 定义一个字符串
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 + "'");
}
}
-
reverse
方法:- 将输入字符串转换为字符数组,以便可以修改字符。
- 计算字符数组的长度。
- 使用一个
for
循环来交换字符,从头到中间进行交换,直到字符串反转完成。 - 最后将字符数组转换回字符串并返回。
-
main
方法:- 定义一个字符串
s
。 - 打印原字符串。
- 调用
reverse
方法反转字符串,并将结果存储在reversedS
中。 - 打印反转后的字符串。
- 定义一个字符串
方法 2: 使用 StringBuilder
的 reverse()
方法
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 的数组方法来反转字符串。