衬底新行

Substring new line

本文关键字:新行 衬底      更新时间:2023-10-16

我正在使用substr()函数,但它不起作用。我的代码低于

std::string s1 = ".V/123n"
          ".V/233n";
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

有人能告诉我哪里出了问题吗?

您的字符串包含2行。执行".V/123\n".V/223\n"将执行与".V/122\n.V/223\n"相同的操作。将其拆分为单独的变量或数组。您的substr(3)所做的是提取字符串中从第4个字符到最后的所有字符,因此"ss"被设置为"123\n.V/223\n"。这就是您所看到的。

你想要的是类似的东西

  std::string s1[2] = { ".V/123n", ".V/233n"};
  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;
    }
  }

代码的输出应该是:

123
.V/233
<empty line>

这正是它在我的机器上打印的。首先请注意,后面的3位数字是233(我想这是拼写错误),而不是123。substr(3)所做的就是:它从字符串中删除前3个字符。没有理由删除.V/。

我看到的第一件奇怪的事情是s1 的init

std::string s1 = ".V/123n"
      ".V/233n";

如果您只希望它是".V/123n",则应该将其声明为:

std::string s1 = ".V/123n";

第二个奇怪的事情是对substr的第二次调用,它只定义了位置,所以你会从这个位置到字符串的末尾,所以这就像广告中说的那样。我在下面为您添加了一个参考资料。

参考:http://www.cplusplus.com/reference/string/string/substr/

ss = s1.substr(3).substr(0,3);

这应该工作