剪切单词中以-------作为分隔符的字符串



你好,我有以下句子,它在一个字符串和一行中,但很长:

l-s-s---s-l---s-s-s-------s-l---l---l-s-s-s-s-l---l-l-s-s---s---s-s---l-s-l-s---s-s-s-s---s---l-s-------l-s-l-l-s---s-l-l-s-l-s---l-s-l-l-s-l-------     

(莫尔斯电码(---(3x-(分隔字母,-------(7x-(分隔单词。我怎样才能把很长的代码用文字删掉。

我试过以下几种:

size_t posWordNext{};
size_t posWordPre{};
while (true) {
posWordNext += code.find("-------");
if (posWordNext >= code.size()) {
break;
}
cout << code.substr(posWordPre, posWordNext) << endl;
posWordPre = posWordNext;
}

这是输出:

l-s-s---s-l---s-s-s
-------s-l---l---l-s-s-s-s-l---l-l-s-s
s-s-s-s-l---l-l-s-s---s---s-s---l-s-l-s---s-s-s-s---s---l
---s---s-s---l-s-l-s---s-s-s-s---s---l-s-------l-s-l-l-s---s-l-l-s-l-s---l-s

每次调用code.find()时,都会再次从字符串的开头进行搜索。您没有在每次迭代中修改code,因此find()每次都会返回相同的偏移量。您应该将posWordPre传递给find()的第二个参数,作为开始搜索的起始偏移量。

此外,当您调用code.substr()时,您将第二个参数视为要停止的偏移量,但该参数实际上需要一个字符计数,而不是偏移量。

由于这些错误,您正在以错误的偏移量截断code字符串。

试试类似的东西:

size_t posWordPre = 0, posWordNext;
while ((posWordNext = code.find("-------", posWordPre)) != string::npos) {
cout << code.substr(posWordPre, posWordNext - posWordPre) << endl;
posWordPre = posWordNext + 7;
}
if (posWordPre < code.size())
cout << code.substr(posWordPre) << endl;

在线演示

最新更新