鱼C论坛

 找回密码
 立即注册
查看: 1070|回复: 3

[已解决]pop_back的用法

[复制链接]
发表于 2023-10-20 21:04:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
#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: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> 头文件来处理输入和输出。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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",因为最后一个字符"."被成功删除了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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> 头文件来处理输入和输出。

球一个最佳答案谢谢啦!这对我非常重要!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-7 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表