提问者:小点点

在 ------- 作为分隔符的单词中剪切字符串[重复]


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

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

共1个答案

匿名用户

每次调用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;

在线演示