我正在创建一个非常基本的程序,它从文本文件中读取一个数字列表,以相反的顺序打印它们,然后说明该顺序是否与原始顺序相同(如古代综合症)。
到目前为止,程序能够以相反的顺序打印,但我不确定如何检测它是否与原始文件相同。任何帮助将不胜感激:)
编辑:抱歉,不得不离开。这是我到目前为止所拥有的。得到它反转,只需要检查回文。将阅读回复。#include <iostream>
#include <fstream>
using namespace std;
int main()
{
const int ARRYLENGTH=20;
int contnums[ARRYLENGTH];
int contents;
ifstream myFile("problem3.txt");
if(! myFile )
{
cout << "File cannot be found";
exit(EXIT_FAILURE);
}
while(!myFile.eof())
{
myFile>>contents;
for(int i=0;i<ARRYLENGTH;i++)
{
myFile >> contnums[i];
}
}
cout<<contents<<" ";
for (int i = 1; i < ARRYLENGTH; i++)
{
bool same = false;
for (int j = 0; j < i && (same == false); j++){
if (contnums[i] == contnums[j])
same = true;
}
if (!same) {
cout<< contnums[i] << " ";
}
}
cout << "\n";
system("pause");
myFile.close();
}
答案 0 :(得分:1)
我只是想知道比较2个列表可以在std库中工作。它有效: - )
#include <list>
#include <fstream>
using std::list;
using std::ifstream;
bool foo(const char * fn)
{
list<int> orig;
list<int> rev;
ifstream ifs(fn,std::ifstream::in);
while( ifs.good() && !ifs.eof() )
{
int num =0;
ifs >> num;
orig.push_back(num);
rev.push_front(num);
}
bool equal = (orig == rev);
return equal;
}
static bool test1 = foo("file1.txt");
static bool test2 = foo("file2.txt");
<强> WHERE 强>
file1.txt包含
1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1 8
和file2.txt包含
1 2 3 4 5 6 7 8 9 0 9 8 7 6 5 4 3 2 1
答案 1 :(得分:0)
尝试从开始到结束迭代,并将值与从end到begin的迭代器的值进行比较。
答案 2 :(得分:0)
如果您知道自己拥有多少物品,可以通过以下方式完成:
for(int i = 0; i < count/2; ++i) { //count/2 becouse you only have to check half
if(array[i] != array[count-i-1]) { /*not palindrome */ }
}
//palindrome
最简单的方法,但是我喜欢@Dave来评论一个更好,因为它以很好的方式使用STL和迭代器。 (只要您正在使用STL容器)。