lsmCC 发表于 2023-10-20 21:04:55

pop_back的用法

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string res,str;//直接不读取空格,直接将每个单词给分开了
    while(cin>>res)
    {
      // if(res.back()=='.')
      res.pop_back();
      if(res.size()>str.size())str=res;
    }
    cout<<str<<endl;
}

pop_back不是直接删除秋后一个元素吗,为什么当输入aaa bbb ccc.,却输出ccc

陶远航 发表于 2023-10-20 21:05:26

pop_back() 是一个用于删除容器(如字符串或向量)末尾元素的函数。在你给出的代码中,pop_back() 用于删除字符串 res 的最后一个字符。

当你输入 \"aaa bbb ccc.\" 时,这个代码会按空格分割输入,然后逐个处理每个单词。对于每个单词,它首先检查是否以 '.' 结尾。如果是,它就会使用 pop_back() 删除这个字符。然后,它会检查当前单词的长度是否大于 str 的长度。如果是,它就会将 str 设置为当前单词。最后,它会输出 str。

在你的例子中,\"aaa\"、\"bbb\" 和 \"ccc.\" 都被处理。对于 \"ccc.\",它以 '.' 结尾,所以 '.' 被 pop_back() 删除,剩下 \"ccc\"。然后,因为 \"ccc\" 的长度(3)大于 \"bbb\" 的长度(3),所以 str 被设置为 \"ccc\"。最后,输出的是 \"ccc\"。

注意,如果你的输入是 \"aaa bbb ccc\"(没有 '.'),那么输出将是 \"bbb\",因为 pop_back() 不会删除任何字符,而且 \"bbb\" 和 \"ccc\" 的长度都是3,但是 \"bbb\" 是先出现的。
请注意,本回答来自GPT-4
如果问题已经解决,请设置最佳答案

isdkz 发表于 2023-10-20 21:05:36

在这段代码中,pop_back()函数被用来删除字符串res的最后一个字符。但是,在这个代码中,pop_back()函数没有被正确地使用。

在while循环中,每次从输入中读取一个单词并将其存储在变量res中。然后,通过比较res和str的大小,确定是否需要更新str的值。但是,pop_back()函数被注释掉了,所以它并没有起到删除最后一个字符的作用。

因此,无论你输入什么字符串,str的值都不会改变,最终输出的结果始终是空字符串。

要解决这个问题,你需要取消注释if语句,并将其放在res.pop_back()的前面,以便在比较字符串大小之前删除最后一个字符。修改后的代码如下所示:

#include <bits/stdc++.h>
using namespace std;
int main()
{
    string res, str;
    while(cin >> res)
    {
      if(res.back() == '.')
            res.pop_back();
      if(res.size() > str.size())
            str = res;
    }
    cout << str << endl;
}


这样,当输入"aaa bbb ccc."时,输出将会是"ccc",因为最后一个字符"."被成功删除了。

Mike_python小 发表于 2023-10-20 21:05:50

在你的代码中,pop_back 部分应该是用来去除句子末尾的标点符号的。然而,你在判断条件(if)语句中使用了注释符号 //,导致 pop_back 操作无效。

修改后的代码如下所示:


#include <iostream>
using namespace std;

int main() {
    string res, str;
    while (cin >> res) {
      if (res.back() == '.') {
            res.pop_back();
      }
      if (res.size() > str.size()) {
            str = res;
      }
    }
    cout << str << endl;
    return 0;
}


上述代码会将输入的字符串按照空格进行分割,并逐个处理。如果遇到以句号结尾的单词,即 .,则会使用 pop_back 将句号去除。同时,会找出长度最长的单词,并将其输出。

例如,对于输入 aaa bbb ccc., 程序会输出 ccc,因为在去除句号后,ccc 是最长的单词。

请注意,在使用 <bits/stdc++.h> 头文件时可能会遇到一些问题,因为它不是标准库的一部分。建议使用 <iostream> 头文件来处理输入和输出。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: pop_back的用法