2013-03-16 85 views
0

有谁知道更好的方式来验证C++中的字符串格式,而不使用C++ 11正则表达式类。基本上我有在这种类型的格式 TAG1的几个串:VALUE,TAG2:VALUE,TAG1:VALUE,TAG2:VALUE无正则表达式的字符串格式验证(C++ 03)

TAG1和TAG2是字符串,值是各种长度

一个例子的整数值字符串将是:“PPS:112,FJ:543,PPS:76432,FJ:753”等等。

我需要一个函数来验证格式是否正确。

到目前为止,我正在进行字符验证。这似乎很乏味。有没有更好的方式,我根本不知道。再次,我想避免使用C++ 11或任何第三方库的正则表达式,除非必须。我主要想知道是否有更好的方法来用C++和STL来做到这一点。

回答

2

根本没有使用任何第三方库。关于使用标准库组件的最佳做法如下所示:

#include <string> 
#include <algorithm> 

bool verify(const std::string& s) 
{ 
    typedef std::string::size_type  size_type; 
    typedef std::string::const_iterator cstr_it; 

    size_type colon_index = s.find(":"); 

    if (colon_index == std::string::npos) 
    { 
     return false; 
    } 

    cstr_it letter_end = s.begin() + colon_index; 
    bool valid_letter = std::all_of(s.begin(), letter_end, isupper); 
    bool valid_number = std::all_of(letter_end, s.end(), isdigit); 

    return valid_letter && valid_number; 
} 
+0

这只验证字符串的一部分,如TAG:123。我需要验证整个字符串,如我的原始示例。我的字符串非常长(每个字符串有1000个以上的标签)但是整个字符串需要使用逗号和空格格式,正如我以前所示。此外,我必须确保只有两个标签,并且它们交替出现,如FIZZ:123,BUZZ:653,FIZZ:4236,BUZZ:234。这是非常简单的正则表达式,但在C + +我很茫然。当然,我可以在循环中使用此函数来验证每个子字符串,但这看起来非常低效。 – MadOgre 2013-03-16 08:55:24

+1

正则表达式不会更高效。在封面下它基本上做着完全相同的事情 - 它更简洁。 – Yuushi 2013-03-16 11:52:56

+0

注意:'all_of'是C++ 11的扩展。如果算法头中没有这些函数,您将希望从http://en.cppreference.com/w/cpp/algorithm/all_any_none_of获取一些实现代码,用于“all_of”和“find_if_not”。 – Jon 2015-05-13 15:31:42

相关问题