gpt4 book ai didi

c++ - 使用 c++ 标准库中的堆栈反转句子的单词

转载 作者:太空宇宙 更新时间:2023-11-04 16:07:22 28 4
gpt4 key购买 nike

我正在尝试使用 c++ 标准库中的 std::stack 反转每个句子的单词。

输入文件内容为:

3
foobar
this is a test
all your base

所以答案应该是:

foobar
test a is this
base your all

但相反,答案是:

foobar
test test test test
base base base base

我想不通为什么。以下是代码:

#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <cstring>
#include <stack>

using namespace std;

int main() {
FILE *fp, *fpo;
fp = fopen("test.in", "r");
int tests;
fscanf(fp, "%d", &tests);
char ch;
fscanf(fp, "%c", &ch);
for (int i = 0; i < tests; i++) {
char *letters;
letters = (char*)calloc(1000, sizeof(char));
stack <char*> words;
fscanf(fp, "%s", letters); fscanf(fp, "%c", &ch);

while (ch != '\n' && ch != EOF) {
words.push(letters); printf(" %s", words.top());
fscanf(fp, "%s", letters); fscanf(fp, "%c", &ch);
}
words.push(letters); printf(" %s", words.top());
printf(" -- ");
while (!words.empty()) {
printf(" %s", words.top());
words.pop();
}
printf("\n");
free(letters);
}
fclose(fp);
}

最佳答案

请不要以这种方式混合使用 CC++。它几乎不可读。一些准则:

  • 不要对字符串使用原始字符数组,使用:std::string
  • 使用 C++ 工具读取行:std::getline
  • 要使用之前的功能,您需要使用 C++ 文件流 std::ifstream .
  • 一旦你阅读了一行,你就可以使用 std::stringstream和一个 std::string 来从行中提取每个单词。
  • 然后您可以将每个单词压入堆栈,然后弹出以反转整个字符串。

关于c++ - 使用 c++ 标准库中的堆栈反转句子的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215453/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com