我正在使用substr()
功能,但它不起作用。我的代码在
std::string s1 = ".V/123\n"
".V/233\n";
std::string ss;
if(s1.substr(0,3) == ".V/")
{
ss = s1.substr(3);
std::cout << ss;
} else {
std::cout << "INCORRECT" << std::endl;
}
输出为123.V/123
不应该是:
123
123
有人可以告诉我哪里出错了吗?
答案 0 :(得分:1)
我看到的第一个奇怪的事情是init的s1
std::string s1 = ".V/123\n"
".V/233\n";
如果您只想将其设为".V/123\n"
,则应将其声明为:
std::string s1 = ".V/123\n";
第二个奇怪的事情是第二次调用substr,只定义了位置,所以你将从位置到字符串的末尾,这样就像宣传的那样工作。我在下面为你添加了一个参考文献。
参考: http://www.cplusplus.com/reference/string/string/substr/
答案 1 :(得分:1)
代码的输出应为:
123
.V/233
<empty line>
这正是它在我的机器上打印的内容。 首先注意第二个3位是233(我猜这是一个错字),而不是123.所有substr(3)的作用是:它从你的字符串中删除前3个字符。没理由.V /应该删除。
答案 2 :(得分:1)
您的字符串包含2行。执行“.V / 123 \ n”“。V / 223 \ n”将与“.V / 123 \ n.V / 223 \ n”相同。将其拆分为单独的变量或数组。你的substr(3)正在做的是将字符串中的所有字符从第4个字符提取到结尾,所以'ss'被设置为“123 \ n.V / 223 \ n”。这就是你所看到的。
你想要的是这样的
std::string s1[2] = { ".V/123\n", ".V/233\n"};
std::string ss;
for (int i = 0; i < 2; ++i) {
if (s1[i].substr(0,3) == ".V/") {
ss = s1[i].substr(3);
std::cout << ss;
} else {
std::cout << "INCORRECT" << std::endl;
}
}
答案 3 :(得分:0)
ss = s1.substr(3).substr(0,3);
这应该有效