C 语言中单词反转349


C 语言中单词反转是一个常见的编程任务,涉及将一个给定字符串中的单词按相反顺序重新排列。本教程将全面探讨在 C 语言中实现单词反转的各种方法,并通过详细的示例对每个方法进行说明。

方法 1:使用 strrev() 函数

对于较短的字符串,可以使用 C 标准库中的 strrev() 函数。此函数接受一个字符串指针并返回其反转版本。下面的代码展示了如何使用 strrev() 反转字符串中的单词:```C
#include
#include
int main() {
char str[] = "Hello World";
// 反转整个字符串
strrev(str);
// 输出反转后的字符串
printf("%s", str);
return 0;
}
```

方法 2:使用 strtok() 函数

strtok() 函数可以用于将字符串分解成一系列标记(token)。通过使用适当的分隔符(例如空格),我们可以使用 strtok() 分解字符串中的单词,然后反向重新组装它们。以下代码演示了此方法:```C
#include
#include
int main() {
char str[] = "Hello World";
char *token;
// 分解字符串
token = strtok(str, " ");
while (token != NULL) {
// 反向重新组装单词
printf("%s ", token);
// 获取下一个单词
token = strtok(NULL, " ");
}
return 0;
}
```

方法 3:使用指针反转单词

此方法涉及使用指针来遍历字符串并反转各个单词。它不需要任何库函数。以下代码展示了此方法的实现:```C
#include
int main() {
char str[] = "Hello World";
int len = strlen(str);
char *start, *end;
// 遍历字符串
for (int i = 0; i < len; i++) {
// 寻找单词开头
if (str[i] != ' ') {
start = &str[i];
}
// 寻找单词结尾
while (i < len && str[i] != ' ') {
i++;
}
end = &str[i - 1];
// 反转单词
while (start < end) {
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
// 输出反转后的字符串
printf("%s", str);
return 0;
}
```

方法 4:使用递归

递归是一种将问题分解成较小实例的技术。我们可以使用递归来反转字符串中的单词,如下所示:```C
#include
void reverseWord(char *str, int start, int end) {
if (start >= end) {
return;
}
// 交换单词中的字符
char temp = str[start];
str[start] = str[end];
str[end] = temp;
// 递归反转单词的两半
reverseWord(str, start + 1, end - 1);
}
void reverseWords(char *str) {
int len = strlen(str);
// 遍历字符串并反转各个单词
int start = 0, end = 0;
while (end < len) {
if (str[end] != ' ') {
end++;
} else {
reverseWord(str, start, end - 1);
start = end + 1;
end = start;
}
}
// 反转最后一个单词
if (start < end) {
reverseWord(str, start, end - 1);
}
// 反转整个字符串
reverseWord(str, 0, len - 1);
}
int main() {
char str[] = "Hello World";
reverseWords(str);
// 输出反转后的字符串
printf("%s", str);
return 0;
}
```

2024-11-29


上一篇:巧用 C 语言输出 8 个空格

下一篇:C 语言输出 1 的方法