Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/154.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何检查文本文件是否只包含某些字符(例如';s';,';f';,';';,';\n';)(更新)_C++ - Fatal编程技术网

C++ 如何检查文本文件是否只包含某些字符(例如';s';,';f';,';';,';\n';)(更新)

C++ 如何检查文本文件是否只包含某些字符(例如';s';,';f';,';';,';\n';)(更新),c++,C++,我正在执行迷宫程序并从文件中读取迷宫,但我需要检查文件是否仅包含“s”、“f”、“#”或“\n”字符,否则是否打印错误消息?我试了很多次,但都弄糊涂了~ 现在我正在尝试使用STL来解决它,但是有新的问题 void fillList(list<char> &myList, const char *mazeFile ) { ifstream inFile; string lines; inFile.open(m

我正在执行迷宫程序并从文件中读取迷宫,但我需要检查文件是否仅包含“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;
}
void fillList(list&myList,const char*mazeFile)
{
河流充填;
弦线;
填充开放式(mazeFile);
而(!infle.eof())
{
getline(填充,行);

对于(int i=0;i,这里有一个方法检查文件是否包含特定字符串:

#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;
}
#包括
#包括
#包括
使用名称空间std;
bool wordExists(字符*文件,字符*字)
{
弦线;
ifstream文件流;
打开(文件);
//直到我们看不到更多的台词
while(getline(fileStream,line))
{
if(line.find(word)!=string::npos)
返回true;
}
返回false;
}

由于您尚未提供问题的实现,我无法确定您的错误是什么-但是如果此代码不起作用,请随时告诉我(我只是在记事本++中粗略地解决了这个问题)或者如果您还有其他的顾虑。

因为您有一个STD::string,您可以考虑各种字符串搜索成员函数。< /P> 例如

std::string str(“s#####X##f”);
std::size_t found=str.find_first_not_of(“sf#\n”);
如果(找到!=std::string::npos){

std::您是否需要发布一些代码来向我们展示您的尝试。我认为您可能也需要空格字符,否则迷宫将是四面墙。我使用了下面所示的方法,但我发现它用于字符串而不是字符!上面的代码我使用了迭代器~但不确定它有什么问题!您在哪里学习编写
(!infle.eof())
?这是错误的。@Lightness在Orbi中比赛,来自书本!我们的讲座~但是没有checkMaze()的问题函数!我想尝试将文件的每个字符与这三个字符进行比较,如果没有,则返回false,否则返回true。是的,我知道!但我的意思是文件应该只包含一个特定的字符串。我做了与您相同的解决方案!例如,如果文件只包含“s”、“f”、“#”或“\n”然后我打印它,否则打印出一条错误消息,上面写着“无效字符”@user3567012好的,然后检查while循环中的每个单词,如果没有找到任何字符串,则返回false。将多个字符串作为参数传递。谢谢,我会尝试!但另一个问题是,我是否找到了它们,但也找到了其他字符,如“%”?那么怎么做这是一个非常普通的答案。请提供正确的解决方案,而不是提示。@Nilesh:公平地说,即使没有链接,这也是一个非常大的提示。但是,是的,如果有一个例子,答案会更好。嘿,好吧,@Nilesh,Erwin和cHao,我会为后代添加一个例子。我对链接可能中断的论点表示同情(尽管该特定站点非常稳定,并且可以在特定于编译器的文档中查找该标准库函数本身的名称)。
  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';
  }