我应该编写一个程序,只显示最后有大写字母的单词。
例如: “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");
}
答案 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;即,在这种情况下,第二个参数继续增长。