C++ 使用queue和stack翻转字符串里面的单词
时间: 2023-03-28 11:04:47 浏览: 99
可以使用queue和stack来翻转字符串里面的单词。具体做法是,先将字符串中的单词一个一个地压入stack中,然后再一个一个地弹出来,压入queue中。最后再从queue中依次弹出单词,拼接成新的字符串即可。
相关问题
C++ 使用queue和stack翻转字符串里面的单词 代码
我可以回答这个问题。使用queue和stack翻转字符串里面的单词的代码如下:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define MAX_LEN 100
void reverse_words(char *str);
int main() {
char str[MAX_LEN];
printf("请输入一个字符串:");
fgets(str, MAX_LEN, stdin);
reverse_words(str);
printf("翻转后的字符串为:%s", str);
return ;
}
void reverse_words(char *str) {
int len = strlen(str);
char *p = str;
char *q = str;
char *word_start = NULL;
char *word_end = NULL;
char *temp = NULL;
int i;
// 去掉字符串开头的空格
while (*p && isspace(*p)) {
p++;
}
// 如果整个字符串都是空格,则直接返回
if (!*p) {
return;
}
// 翻转单词
while (*p) {
// 找到单词的起始位置
if (!word_start && !isspace(*p)) {
word_start = p;
}
// 找到单词的结束位置
if (word_start && (isspace(*p) || *p == '\n')) {
word_end = p - 1;
}
// 翻转单词
if (word_start && word_end) {
temp = (char *)malloc(word_end - word_start + 2);
for (i = ; word_start + i <= word_end; i++) {
temp[i] = *(word_start + i);
}
temp[i] = '\';
while (i--) {
*q++ = temp[i];
}
free(temp);
word_start = NULL;
word_end = NULL;
}
p++;
}
// 去掉字符串末尾的空格
while (q > str && isspace(*(q - 1))) {
q--;
}
// 添加字符串结束符
*q = '\';
// 翻转整个字符串
q = str;
while (*q) {
q++;
}
q--;
while (p < q) {
char temp = *p;
*p++ = *q;
*q-- = temp;
}
}
```
C++ 将queue输入stack
可以使用两个队列来实现一个栈,具体实现方法可以参考以下步骤:
1. 定义两个队列 queue1 和 queue2,其中 queue1 用于存储栈中的元素,queue2 用于辅助操作。
2. 入栈操作时,将元素插入到 queue1 的队尾。
3. 出栈操作时,将 queue1 中的元素依次出队并插入到 queue2 的队尾,直到 queue1 中只剩下一个元素,然后将该元素出队即可。
4. 在出队操作时,需要将 queue1 和 queue2 交换,以便下一次操作。
需要注意的是,如果 queue1 和 queue2 中都没有元素时,出栈操作会导致错误,需要进行特殊处理。