我有这个字符串“67030416680001337D4912601000000000000”
我想在字母“D”之前取值。
也希望在“D”之后输入4位数值。
我尝试过使用:
string sPanNo = sTrkData.substr(0,17);
string sExpDate = sTrkData.substr(18, 4);
但问题是字符串之前字母“D”的长度会有所不同。
答案 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";
}
}