如何检查文本文件是否仅包含某些字符(例如,'' f','#'' \ n' )(更新)

时间:2014-04-24 02:36:36

标签: c++

我正在做一个迷宫程序并从文件中读取迷宫,但是我需要检查文件中是否只包含“s”,“f”,“#”或“\ n”字符否则会打印错误消息?我尝试了很多次,但真的很困惑〜 现在我正在尝试使用STL来解决它,但是遇到了新的问题!

    void fillList(list<char> &myList, const char *mazeFile )
    {
         ifstream inFile;
         string lines;
         inFile.open(mazeFile);
         while(!inFile.eof())
         {
             getline(inFile,lines);
             for(int i=0;i<lines.length();i++)
                 myList.push_back(lines[i]);
         }
    }   
    bool checkMaze(list<char> &myList)
    {
         list<char>::iterator itr;
         for (itr = myList.begin(); itr != myList.end(); itr++ )
         {
             if(*itr != 's' || *itr != 'f' || *itr != '#' || *itr != '\n')
                 return false;
         }
         return true;
    }


myMaze.fillList(myList,argv[1]);
bool valid = myMaze.checkMaze(myList);
if(myMaze.isValid(argv[1]) && valid == true)
    myMaze.printMaze();
else
{
    cout << "Unable to load maze " << argv[1] << "\n";
    return 0;
}

但它还没打印?这有什么问题?

2 个答案:

答案 0 :(得分:4)

由于你有一个std :: string,你可以考虑各种字符串搜索成员函数。

E.g。 string::find_first_not_of

  std::string str ("s###X##f");
  std::size_t found = str.find_first_not_of("sf#\n");
  if (found!=std::string::npos)  {
     std::cout << "The first non-acceptible character is " << str[found];
     std::cout << " at position " << found << '\n';
  }

答案 1 :(得分:1)

这是一个检查文件是否包含特定字符串的方法:

#include <iostream>
#include <fstream>
#include <string>
using namespace std;

bool wordExists(char* file, char* word)
{
    string line;
    ifstream fileStream;
    fileStream.open(file);

    //until we can't read any more lines 
    while( getline(fileStream, line) )
    {
        if ( line.find(word) != string::npos )
            return true; 
    }
    return false;
}

由于您尚未提供问题的实施,我无法确定您的错误是什么 - 但如果此代码无法正常工作,请随时告诉我(我只是将其粗略化了)在Notepad ++中针对此问题)或者如果您有任何其他问题。