C++ 使用queue和stack翻转字符串里面的单词
时间: 2023-03-28 22:04:47 浏览: 193
可以使用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;
}
}
```
阅读全文