📅  最后修改于: 2023-12-03 14:40:26.651000             🧑  作者: Mango
本文将介绍如何编写C程序来反转给定字符串中的单词。
在很多情况下,我们需要把输入的字符串反转。常见的场景包括字符串加密、用户在网站上输入密码、处理日志文件等。
我们需要完成以下功能:
因此,我们需要实现两个函数:
void reverse(char* str);
void reverseWords(char* str);
reverse()
函数将反转任何给定的字符串,例如:
char str[] = "Hello World!";
reverse(str);
printf("%s\n", str); // 输出 "!dlroW olleH"
reverseWords()
函数将反转字符串中的每个单词,例如:
char str[] = "Hello World!";
reverseWords(str);
printf("%s\n", str); // 输出 "olleH !dlroW"
reverse()
函数可以使用双指针的方法来实现。我们将第一个指针指向字符串的开头,第二个指针指向字符串的末尾。然后,我们交换它们所指向的字符,并分别向字符串的中间移动两个指针,直到它们相遇为止。例如:
void reverse(char* str) {
char* start = str;
char* end = str + strlen(str) - 1;
while (start < end) {
char temp = *start;
*start++ = *end;
*end-- = temp;
}
}
reverseWords()
函数是比较复杂的。我们可以通过以下步骤来完成该函数:
例如:
void reverseWords(char* str) {
// 反转整个字符串
reverse(str);
// 反转每个单词
char* wordStart = NULL;
char* p = str;
while (*p) {
if (wordStart == NULL && !isspace(*p)) {
wordStart = p; // 记录单词开始位置
} else if (wordStart != NULL && (isspace(*p) || *p == '\0')) {
reverse(wordStart); // 反转单词
wordStart = NULL; // 重置
}
p++;
}
// 处理最后一个单词
if (wordStart != NULL) {
reverse(wordStart);
}
}
本文介绍了如何编写C程序来反转字符串中的单词。我们实现了reverse()
函数和reverseWords()
函数来反转字符串和单词。
在实现该功能时,我们使用了双指针和字符串处理函数等技术。这些技术是C程序员必须掌握的基本知识点。
完整代码如下:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
void reverse(char* str) {
char* start = str;
char* end = str + strlen(str) - 1;
while (start < end) {
char temp = *start;
*start++ = *end;
*end-- = temp;
}
}
void reverseWords(char* str) {
// 反转整个字符串
reverse(str);
// 反转每个单词
char* wordStart = NULL;
char* p = str;
while (*p) {
if (wordStart == NULL && !isspace(*p)) {
wordStart = p; // 记录单词开始位置
} else if (wordStart != NULL && (isspace(*p) || *p == '\0')) {
reverse(wordStart); // 反转单词
wordStart = NULL; // 重置
}
p++;
}
// 处理最后一个单词
if (wordStart != NULL) {
reverse(wordStart);
}
}
int main() {
char str[] = "Hello World!";
reverse(str);
printf("%s\n", str); // 输出 "!dlroW olleH"
char str2[] = "Hello World!";
reverseWords(str2);
printf("%s\n", str2); // 输出 "olleH !dlroW"
return 0;
}