衬底新行
Substring new line
我正在使用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);
这应该工作
相关文章:
- 使用新行和不使用新行读取文件
- 遇到新行时,有没有办法停止istream_iterator
- PangoLayout 中忽略的新行
- 使用 clang 格式时,当行很大时,如何将右括号分成新行?
- 如何检测将文本文件读入 int 数组的新行
- 当 getline 直到新行才读取时会发生什么?
- 添加新行时工作代码引发异常.调试技巧?
- QTree查看新行,没有布局就不可见已更改
- 新行上的 clang 格式右括号
- C++流:保存到新行而不是覆盖旧行
- (C++) 使用诅咒打印从文件中读入的新行
- 按升序输出整数时,将最后一个整数放在新行上
- 用C++计算输入文本的新行数
- 为什么我的代码在终端中没有输出任何内容.开始新行没有错误
- WriteConsoleOutputCharacterW - 我的新行在哪里?
- 为什么当测试用例数为 1 时,我的程序不输入而是打印新行?
- 如何运行 while 循环直到到达新行?
- 从文本文件读取时,如何知道是否已到达新行?
- 句子转换器在存在新行的情况下不起作用
- 衬底新行