测试字符串是否符合正确的格式C ++

时间:2014-08-08 10:38:26

标签: c++

我目前正在尝试测试读取的字符串是否与以下格式匹配,而不使用正则表达式。

代码的格式是:

Supplier Reference: XXXXXXX

Date & Time: XXXX

Name of Device: XXXXX

Priority: X

IP Address: XXXXXXXXXXXXXXXXXXXX

Event ID: XXXXXX

Description of Event: XXXXXXXXXXXX

我希望代码有cout << "Format is incorrect" << endl;

这是编辑,取出之前的尝试并回到基础以解释我的逻辑:

using namespace std;

int f;
int main()

{

string mystring;    
ifstream myfile ("test.txt"); 

if (myfile.is_open())

{ while (getline (myfile,mystring))
    {        

        //searches the text entered//
        string search;
        size_t pos;
        {
               //searches the text for the Date entry//
               {
                       search = "Supplier Reference:";
                       pos = mystring.find(search);    
                       {
                           if (pos != string::npos)
                              {
                                   cout<<mystring<<endl;
                                   f=f-1;
                                   }
                              else
                              {
                                  ++f;
                                  }
                              }
               }

               {
                      search = "Date & Time:";
                       pos = mystring.find(search);
                       {
                            if (pos != string::npos)
                           {
                               cout<<mystring<<endl;
                               f = f - 1;
                               }
                               else
                               {
                                   ++f;
                                   }
                               }

               }
               {
                      search = "Name of Device:";
                       pos = mystring.find(search);
                       {
                            if (pos != string::npos)
                           {
                               cout<<mystring<<endl;
                               f = f - 1;
                               }
                               else
                               {
                                   ++f;
                                   }
                               }

               }
               {
                      search = "Priority:";
                       pos = mystring.find(search);
                       {
                            if (pos != string::npos)
                           {
                               cout<<mystring<<endl;
                               f = f - 1;
                               }
                               else
                               {
                                   ++f;
                                   }
                               }

               }
               {
                      search = "IP Address";
                       pos = mystring.find(search);
                       {
                            if (pos != string::npos)
                           {
                               cout<<mystring<<endl;
                               f = f - 1;
                               }
                               else
                               {
                                   ++f;
                                   }
                               }

               }
               {
                      search = "Event ID:";
                       pos = mystring.find(search);
                       {
                            if (pos != string::npos)
                           {
                               cout<<mystring<<endl;
                               f = f - 1;
                               }
                               else
                               {
                                   ++f;
                                   }
                               }

               }
               {
                      search = "Description of Event:";
                       pos = mystring.find(search);
                       {
                            if (pos != string::npos)
                           {
                               cout<<mystring<<endl;
                               f = f - 1;
                               }
                               else
                               {
                                   ++f;
                                   }
                               }

               }
               }
               }
               {
                   if (f>35)
                   cout << f << "Field is missing, Ticket is formatted incorrectly" << endl;
               }
               }
system ("pause");
return 0;                   
               }

我知道代码非常重复。 Cheep and Cheerful是我的目标。

我希望有人能让我知道如何测试线路的顺序?

1 个答案:

答案 0 :(得分:0)

解决此问题的一种方法是读取七行(每行数据一行)。如果一行是空的,那么丢弃它并且不计算它。

然后,对于每一行,您将它分割为冒号':'中的两个字符串。使用左侧部分(例如"Supplier Reference")作为std::map的密钥,右侧部分作为数据。

然后循环遍历地图并确保每个键与文件中所需的键匹配。如果缺少某个密钥,或者地图中存在未知密钥(或者从文件中读取时没有足够的行),则表示格式错误。