C ++字符串" 1"不匹配" 1" (试过正则表达式和布尔' ==')

时间:2015-10-31 01:01:37

标签: c++ regex string

请参阅gif(显示变量的Visual Studio调试器): http://www.elanhickler.com/transfer/regex_does_not_match.gif

bool stob(string s) {
    regex e("1");
    bool b1 = (s == "1"); // false
    bool b2 = (string(s) == "1"); // false
    bool does_it_match1 = regex_match("1", e); // true
    bool does_it_match2 = regex_match(string(s), e); // false
    bool does_it_match3 = regex_match(string("1"), e); // true
    return does_it_match1;
}

为什么不匹配?

http://i.stack.imgur.com/1Llzk.png 图像显示s的输入为" 1",更具体地说是49("1")0("\0")的字符

ideone:https://ideone.com/b8luZF(这会解决这个问题,感谢下面的答案)。

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

int main() {
    regex e("1");
    string s = "1,";
    s.back() = '\0';

    cout << regex_match("1", e) << endl;
    cout << regex_match(s, e) << endl;

    return 0;
}

1 个答案:

答案 0 :(得分:3)

与C字符串不同,C字符串从指针指向并在第一个0字节之前结束,std::string实际上包含 0字节。这似乎与你的字符串完全一样。根据你的调试器,字符串包含两个字符,第一个字符是&#39; 1&#39;第二个是&#39; \ 0&#39;。

因此,您要将2个字符的字符串与1个字符的字符串进行比较,结果因此为假。