你好,我有以下句子,它在一个字符串和一行中,但很长:
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;
在线演示