1

我正在创建一个非常基本的程序,该程序从文本文件中读取数字列表,以相反的顺序打印它们,然后说明该顺序是否与原始顺序相同(如palendrome)。

到目前为止,我的程序能够以相反的顺序打印,但我不确定如何检测它是否与原始文件相同。任何帮助将不胜感激 :)

编辑:对不起,不得不离开。这是我到目前为止所拥有的。让它反转,只需要检查回文。将阅读回复。

#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();
}
4

3 回答 3

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");

在哪里

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 
于 2013-04-24T21:21:29.683 回答
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 容器上工作)。

于 2013-04-24T21:18:18.653 回答
0

尝试从头到尾迭代并将值与从头到尾的迭代器的值进行比较。

于 2013-04-24T20:58:04.650 回答