c语言 用栈实现 字符串中所有单词的顺序反转
时间: 2024-04-15 19:29:15 浏览: 108
要使用栈实现字符串中所有单词的顺序反转,可以按照以下步骤进行操作:
1. 创建一个字符栈。
2. 遍历字符串中的每个字符:
- 如果当前字符不是空格,则将其入栈。
- 如果当前字符是空格:
- 反向输出栈中的字符,实现单词的顺序反转。
- 打印空格。
3. 最后,如果栈中还有字符,说明最后一个单词没有被打印出来,将栈中的字符反向输出。
以下是使用C语言实现的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义字符栈结构
struct Stack {
char* data;
int top;
int maxSize;
};
// 初始化栈
void initStack(struct Stack* stack, int maxSize) {
stack->data = (char*)malloc(maxSize * sizeof(char));
stack->top = -1;
stack->maxSize = maxSize;
}
// 判断栈是否为空
int isStackEmpty(struct Stack* stack) {
return stack->top == -1;
}
// 判断栈是否已满
int isStackFull(struct Stack* stack) {
return stack->top == stack->maxSize - 1;
}
// 入栈
void push(struct Stack* stack, char c) {
if (isStackFull(stack)) {
return;
}
stack->data[++stack->top] = c;
}
// 出栈
char pop(struct Stack* stack) {
if (isStackEmpty(stack)) {
return '\0';
}
return stack->data[stack->top--];
}
// 字符串中所有单词的顺序反转
void reverseWordsOrder(char* str) {
int len = strlen(str);
struct Stack stack;
initStack(&stack, len);
for (int i = 0; i < len; i++) {
if (str[i] != ' ') {
push(&stack, str[i]);
} else {
while (!isStackEmpty(&stack)) {
printf("%c", pop(&stack));
}
printf(" ");
}
}
while (!isStackEmpty(&stack)) {
printf("%c", pop(&stack));
}
}
int main() {
char str[] = "Hello World! This is a test.";
printf("原始字符串:%s\n", str);
printf("单词顺序反转后的字符串:");
reverseWordsOrder(str);
return 0;
}
```
以上是一个使用栈实现字符串中所有单词顺序反转的示例代码。它会按照单词的顺序将字符串中的每个单词反转输出。您可以根据自己的需求进行修改和使用。希望对您有帮助!如有任何疑问,请随时追问。
阅读全文