如何在C ++中从字符串中查找特定值

时间:2014-11-12 13:08:42

标签: c++

我有这个字符串“67030416680001337D4912601000000000000”

我想在字母“D”之前取值。
也希望在“D”之后输入4位数值。

我尝试过使用:

string sPanNo = sTrkData.substr(0,17);
string sExpDate = sTrkData.substr(18, 4);

但问题是字符串之前字母“D”的长度会有所不同。

4 个答案:

答案 0 :(得分:2)

您可以使用string::find_first_of(),例如:

string::size_type dPos = sTrkData.find_first_of('D');
if (dPos != string::npos) {
    string sPanNo = sTrkData.substr(0, dPos);
    string sExpDate = sTrkData.substr(dPos + 1, 4);
}

答案 1 :(得分:2)

您必须使用成员函数find

例如

std::string::size_type n = sTrkData.find( 'D' );

string sPanNo = sTrkData.substr( 0, n ); 

string sExpDate;

if ( n != std::string::npos )  sExpDate = sTrkData.substr( n + 1, 4 );

答案 2 :(得分:0)

或使用<regex> C ++ 11

#include <iostream>
#include <regex>
#include <string>

using namespace std;

std::regex base_regex ( "(\\d+)D(\\d{4})\\d+" );
std::smatch base_match;

string numberstring = "67030416680001337D4912601000000000000";

if (std::regex_match(numberstring, base_match, base_regex))
{
    std::ssub_match base_sub_match = base_match[1];
    std::string number1 = base_sub_match.str();

    base_sub_match = base_match[2];
    std::string number2 = base_sub_match.str();

    cout << number1 << endl;
    cout << number2 << endl;
}

答案 3 :(得分:0)

您可以使用正则表达式验证输入并一步提取所需数据:

#include <iostream>
#include <regex>
#include <string>

int main() {
    using namespace std;

    string input("67030416680001337D4912601000000000000");
    regex re("(\\d+)D(\\d{4})\\d+");

    match_results<string::const_iterator> m;
    if (regex_match(input, m, re)) {
        cout << m[1].str() << endl;
        cout << m[2].str() << endl;
    } else {
        cout << "invalid input\n";
    }
}