找不到错误。 C ++,字符串

时间:2017-03-21 16:18:47

标签: c++ string uppercase

我应该编写一个程序,只显示最后有大写字母的单词。

例如: “somE wordS只是RighT那里” - > “somE wordS RighT”

但我的代码有问题,我找不到错误。 (对不起这段代码,它可能真的搞砸了)

string LastUpperSymbol(string text) {

    int i = 0, space, next, sortEl = 0;
    string textcopy = text;
    int size = textcopy.size();
    string sorted;
    string alph = "abcdefghijklmnopqrstuvwxyz ";
    if (textcopy[0] != alph[26]) {
        space = text.find(" ");
        if(isupper(textcopy[space-1])) {
            sorted.append(textcopy, 0, space+1);
        }
        while(space < textcopy.size()) {
            next = space+1;
            space = text.find(" ", next);
            if(space == -1) {
                if(isupper(textcopy[size])) {
                    sorted.append(textcopy, next, textcopy[size]);
                }
                break;
            }
            else if(isupper(textcopy[space-1])) {
                sorted.append(textcopy, next, space+1);
            }
        }
    }
    else {
        //something
    }
    cout << sorted << endl;
    return text;
}
int main() {

    string text = "somE wordS just RighT there";
    cout << LastUpperSymbol(text);
    system("PAUSE");
}

2 个答案:

答案 0 :(得分:1)

标准库已经提供了您需要在此处执行的绝大多数代码的代码,因此可能更容易使用其中的内容而不是尝试找出现有代码中的问题。

我可能会做这样的工作:

std::string silly_filter(std::string const &in) {

    std::istringstream buff(in);
    std::ostringstream out;

    std::copy_if(std::istream_iterator<std::string>(buff),
        std::istream_iterator<std::string>(),
        std::ostream_iterator<std::string>(out, " "),
        [](std::string const &s) {
            return ::isupper((unsigned char)*s.crbegin());
        });
    return out.str();
}

答案 1 :(得分:0)

据我所知

else if(isupper(textcopy[space-1])) { sorted.append(textcopy, next, **space+1**); }

空格+ 1是要追加的字符串数。因此,如果next = 5,则字符串为w,因此第二个参数应为&#39; wordS&#39;即,在这种情况下,第二个参数继续增长。