我正在做一个迷宫程序并从文件中读取迷宫,但是我需要检查文件中是否只包含“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;
}
但它还没打印?这有什么问题?
答案 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 ++中针对此问题)或者如果您有任何其他问题。