C语言字符串反转
时间: 2025-05-04 14:59:45 浏览: 32
以下是几种常见的 C 语言实现字符串反转的方法及其代码示例:
### 方法一:双指针法
双指针法是一种高效的字符串反转方法,它通过定义两个指针分别指向字符串的起始位置和结束位置,然后逐次交换这两个指针对应的字符并移动指针直到两者相遇。
```c
#include <stdio.h>
#include <string.h>
void Reverse(char *str) {
char *left = str;
char *right = str + strlen(str) - 1;
while (left < right) {
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main() {
char str[10000] = {0};
while (gets(str)) {
Reverse(str);
printf("%s\n", str);
}
return 0;
}
```
此方法的时间复杂度为 O(n),空间复杂度为 O(1)[^1]。
---
### 方法二:循环逆序输出
另一种简单的方式是通过遍历字符串中的每一个字符,并按照从最后一个字符到第一个字符的顺序依次输出。这种方式不需要修改原字符串的内容。
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[1001];
gets(str);
int len = strlen(str);
for (int i = len - 1; i >= 0; i--) {
printf("%c", str[i]);
}
return 0;
}
```
该方法适合仅需显示反转结果而不改变原始数据的情况[^2]。
---
### 方法三:单词顺序反转(保持单词内部不变)
如果需求是对整句字符串中的单词顺序进行反转而保留各单词本身的排列,则需要额外逻辑支持。例如,先整体翻转再局部调整每个单词的方向。
```c
#include <stdio.h>
#include <string.h>
#include <ctype.h>
// 辅助函数用于单个单词内的翻转
void reverseWord(char* start, char* end) {
while(start < end){
char t=*start;
*start++=*end;
*end--=t;
}
}
void reverseWords(char* s){
int n=strlen(s);
// 整体翻转句子
reverseWord(s,s+n-1);
// 局部翻转每个单词
char* wordBegin=NULL;
char* ptr=s;
while(*ptr != '\0'){
if(!isspace(*ptr)&&wordBegin==NULL){
wordBegin=ptr;
}
if(wordBegin && (isspace(*(ptr+1)) || *(ptr+1)=='\0')){
reverseWord(wordBegin,ptr);
wordBegin=NULL;
}
ptr++;
}
}
int main(){
char sentence[]="hello world this is a test";
puts(sentence);
reverseWords(sentence);
puts(sentence);
return 0;
}
```
上述程序展示了如何既反转单词序列又维持其内部结构不变的技术细节[^4]。
---
### 总结
以上三种方式各有特点,可根据实际应用场景选取合适方案完成任务。无论是简单的字符级操作还是复杂的语义级别变换,在C语言里都能找到对应的解决办法。
阅读全文
相关推荐


















