【发布时间】:2021-09-27 09:19:12
【问题描述】:
你好,我有以下句子,它在一个字符串中,在一行中,但很长:
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。您是否期望code.find("-------")在循环的每次迭代中返回不同的结果? -
输出应该是什么?如果输入不正确(例如 6x
-)会发生什么。 -
您阅读过
std::string::find的文档吗?您可以使用一些有趣的重载和默认参数。 -
这是输出:lss---sl---sss -------sl---l---lssssl---llss ssssl---llss--- s---ss---lsls---ssss---s---l ---s---ss---lsls---ssss---s---ls----- --lslls---sllsls---ls 但在 cmets 它不显示换行符抱歉