子串新线

时间:2012-01-28 15:11:46

标签: c++ string substring

我正在使用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

有人可以告诉我哪里出错了吗?

4 个答案:

答案 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);

这应该有效