c语言单词反转不用指针
时间: 2025-06-18 11:32:19 浏览: 12
### C语言中实现单词反转而不使用指针的方法
在C语言中,可以通过数组索引来替代指针对字符串的操作。以下是基于引用中的逻辑[^1]和[^2],重新设计的一种不依赖于指针的单词反转方案。
#### 方法概述
该方法的核心思路是通过数组下标访问字符数据,而不是直接操作指针。主要分为以下几个部分:
1. 整体字符串翻转。
2. 对每个单词内部再次翻转以恢复其原始顺序。
---
#### 完整代码示例
```c
#include <stdio.h>
#include <string.h>
void reverse_string(char str[], int start, int end) {
while (start < end) {
char temp = str[start];
str[start] = str[end];
str[end] = temp;
start++;
end--;
}
}
void reverse_words_in_sentence(char sentence[]) {
int length = strlen(sentence);
// Step 1: Reverse the entire string.
reverse_string(sentence, 0, length - 1);
// Step 2: Reverse each individual word to restore their original order.
int i = 0;
int j = 0;
while (j <= length) {
if (sentence[j] == ' ' || sentence[j] == '\0') {
reverse_string(sentence, i, j - 1);
i = j + 1;
}
j++;
}
}
int main() {
char input[100];
printf("Enter a sentence: ");
fgets(input, sizeof(input), stdin);
// Remove trailing newline character from fgets
size_t len = strlen(input);
if (len > 0 && input[len - 1] == '\n') {
input[len - 1] = '\0';
}
reverse_words_in_sentence(input);
printf("Reversed words: %s\n", input);
return 0;
}
```
---
#### 代码解析
1. **`reverse_string` 函数**
此函数用于翻转一段范围内的子串。它接受三个参数:目标字符串 `str[]`、起始位置 `start` 和终止位置 `end`。通过交换两端字符逐步向中心靠拢完成翻转[^1]。
2. **`reverse_words_in_sentence` 函数**
这一函数实现了两步处理过程:
- 首先调用 `reverse_string` 将整个输入句子完全颠倒过来。
- 接着逐一遍历已翻转后的字符串,找到每一个单词并将其单独再翻转回来,从而还原单个单词的正常排列次序[^2]。
3. **主函数 (`main`) 的功能**
主要负责接收用户的输入,并去除可能存在的多余换行符后再传递给核心算法执行实际转换工作。
---
#### 注意事项
- 输入缓冲区大小应适当设定以防溢出风险。
- 使用标准库函数如 `fgets` 而非 `gets` 来读取用户输入更加安全可靠。
- 处理边界条件时需特别小心,比如空格开头结尾以及连续多个空白等情况均应在测试范围内考虑周全。
---
###
阅读全文
相关推荐


















