从 txt 文件中读取字符串并在 C++ 中的第一行停止
read strings from txt file and stop at first line in c++
我必须使用堆栈和队列来检查它是否是txt文件中的回文,用于我的作业。
******Txt 文件
******我说过你从来没有说过"永远不要说永远"吗?你说我做到了。
我说过你从来没有说过"从不"吗?
你高兴你是国王吗?
国王,你高兴你是国王吗?
落叶后落叶。
妈妈说:"你做什么?"-你按照妈妈说的去做。
妈妈说:"你做什么?"-你做妈妈做的事情。
你知道,我为你做的很少,因为我对你知之甚少。
你知道,我为你做的很少,因为我对你知之甚少。
第一夫人统治国家。
埃舍尔,画手,画手画。
你可以把燕子关在笼子里,不是吗?
第一夫人统治国家,并陈述规则:"女士优先"。
相信自己是有福的人是有福的。
你可以把燕子关在笼子里,不是吗,但你不能把笼子关起来,对吗?
管好自己的事:管好自己的事。
骑,骑
!嘎吱嘎吱,嘎吱嘎吱
。管好自己的事。
人人为我,人人为我!
埃舍尔,画手,画手画埃舍尔。
假装每行之间没有空格。所以,在第一行之后,没有空行,第二句话紧随其后。
我使用 istringstream 在第一行停止,但输出有错误。由于某种原因,每个句子的最后一个单词打印出两次。
这是我的代码,
void getData(Stack<string> &s, Queue<string> &q)
{
ifstream readFile;
string temp;
string temp1;
Stack<string> a[24];
Queue<string> b[24];
int j = 0;
//int b = 0;
readFile.open("test_word_plndrms.txt");
if(!readFile)
{
cout << "Error opening the file" << endl;
exit(1);
}
else {
while(!readFile.eof()) {
getline(readFile, temp);
for (size_t i = 0; i < temp.length(); ++i) {
if (ispunct(temp[i]))
temp.erase(i--, 1);
if(isupper(temp[i]))
temp[i] = tolower(temp[i]);
}
istringstream ss(temp);
while(ss) {
ss >> temp1;
cout << temp1 << endl;
a[j].push(temp1);
b[j].enqueue(temp1);
}
j++;
}
}
}
这是我的输出,
做了我说你从不说从不说从不你说我做了做了做了我说你从不说从不从不是你高兴你是王王王是你高兴你是王王秋天叶后叶秋天秋天说妈妈什么做你做你做什么妈妈说说说妈妈什么做你做你做什么妈妈做做你知道我做了小为你为小做了我知道你你你知道我做了小为你因为小做了我知道你你第一女士 们统治这州州埃舍尔绘图手提请手绘图绘图你能笼一个吞斜面你你第一女士 们统治这州和州这统治女士 们第一第一祝福是他们那相信他们是祝福祝福你能笼一个吞斜面你但你斜面吞一个笼能你你介意你有商有你介意介意骑和骑和骑和骑和骑和骑和骑骑哒和哼和紧缩和紧缩和哼和哒哒介意你有商商都为一和一为都都埃舍尔绘图手提请手绘图埃舍尔埃舍尔程序以退出代码结束:0
我试图做的是阅读第一行,并将每个单词,例如"做了"我"说"你"从不"说"从不"说"从不"你"说">我"做了"并将它们推到堆栈和队列中。然后,弹出每个字符串,如果弹出的字符串不同,它不是回文句子,如果都一样,它是一个回文句子。
有人可以给我这个家庭作业的任何建议吗?谢谢。
它之所以两次打印最后一个单词是因为以下语句:
while(ss)
{
...
}
while 循环需要一个额外的循环,因为 ss 仍然有效。您可能可以清除它并检查 temp1 是否为空。
while (ss)
{
ss >> temp1;
if (temp1.empty())
{
break;
}
cout << temp1 << endl;
a[j].push(temp1);
b[j].enqueue(temp1);
temp1.clear();
}
您的while
循环执行了一个额外的循环,因为它错误地检查是否存在 CURRENT 单词(已在上一个循环中打印(。它应该检查是否存在要打印的下一个单词。因此,我更改了while
循环的条件。
void getData (Stack<string> &s, Queue<string> &q) {
ifstream readFile;
string temp;
string temp1;
Stack<string> a[24];
Queue<string> b[24];
int j = 0;
readFile.open("test_word_plndrms.txt");
if (!readFile) {
cout << "Error opening the file" << endl;
exit(1);
}
else {
cout << "Reading file" << endl << endl;
while (!readFile.eof()) {
getline(readFile, temp);
for (size_t i = 0; i < temp.length(); ++i) {
if (ispunct(temp[i])) {
temp.erase(i--, 1);
}
if (isupper(temp[i])) {
temp[i] = tolower(temp[i]);
}
}
cout << "Finished reading line #" << j+1 << ":" << endl;
istringstream ss(temp);
while (ss.peek() != EOF) {
ss >> temp1;
cout << temp1 << ' ';
a[j].push(temp1);
b[j].enqueue(temp1);
}
cout << endl << endl;
j++;
}
}
}
- 用c++从输入文件中读取另一行
- 读取文件的最后一行并输入到链接列表时出错
- 我正在使用嵌套的while循环来解析具有多行的文本文件,但由于某种原因,它只通过第一行,我不知道为什么
- 从C++dll访问C#中的一行主要参数
- 在C++中,我如何接受不同于同一行的用户输入
- 如何从一行中读取特定数量的字符?(C++)
- 读取最后一行代码算法 - c++ 时出现问题
- 查找矩阵C++中每一列和每一行的最小和最大元素
- 有没有办法在一行中填充矢量图
- 需要将一行代码从C++ Qt翻译成PyQt
- 为什么如果我添加这一行,我的程序会不断询问值
- 如何使代码打印文本文件中的第一行?
- 如何在C++中以这种方式返回一行文本?
- 如何使用运算符在同一行中多次调用函数
- 如何格式化我的文本文件以使其不会一遍又一遍地重复同一行?
- 而(!inputfile.eof())只读取第一行?
- 这段代码的最后一行在做什么?
- 逐字读取文本文件中的每一行并转换为 int(无限循环或崩溃?
- C++找出覆盖同一行的数组
- 如何让字符数组在一行而不是多行中打印出来?