You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何访问std::vector中std::string最后两位并转为整数?求最优方案

解决std::vector中std::string最后两位字符转整数的问题

看起来你在提取std::vector里每个std::string的最后两位字符并转成整数时遇到了代码逻辑问题,我来帮你修正并给出更优的实现方式~

先说说你代码里的问题

你的尝试代码存在几个关键错误:

  • 第二个循环中,你错误地使用了v[s[s.size()-1]],这里的s是输入阶段的临时变量,并非当前遍历到的v[i]对应的字符串,而且s的长度也不是当前元素的长度,这会导致索引越界或者访问到错误的元素。
  • 判断条件的逻辑和你的需求不匹配,你原本要提取最后两位转整数,但代码里的条件和输出逻辑完全偏离了目标。

最优实现方案

下面是修正后的代码,同时加入了一些优化点,让代码更简洁、安全:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main() {
    int n;
    string s;
    cin >> n;
    vector<string> v;
    // 提前预留空间,避免vector多次扩容,提升性能
    v.reserve(n);

    for (int i = 0; i < n; ++i) {
        cin >> s;
        // 过滤长度不足2的字符串,防止后续访问越界
        if (s.size() >= 2) {
            v.push_back(s);
        } else {
            cout << "跳过长度不足2的字符串:\"" << s << "\"" << endl;
        }
    }

    // 使用范围for循环(C++11及以上支持),更简洁易读
    for (const auto& str : v) {
        // 获取最后两位字符,str.back()是C++11新增的方法,等价于str[str.size()-1]
        char second_last = str[str.size() - 2];
        char last = str.back();

        // 字符转整数,利用ASCII码的差值
        int num_second_last = second_last - '0';
        int num_last = last - '0';

        // 按需求输出结果
        cout << "字符串\"" << str << "\"对应的最后两位整数:" << num_second_last << " 和 " << num_last << endl;
    }

    return 0;
}

优化点说明

  • 提前预留vector空间:用v.reserve(n)提前分配足够的内存,避免vector在push_back时多次扩容,提升处理大量数据时的性能。
  • 范围for循环:代替传统的索引循环,代码更简洁,也避免了索引错误的可能。
  • 字符串长度检查:提前过滤掉长度不足2的字符串,防止后续访问str[str.size()-2]时出现越界的未定义行为。
  • 直观的字符访问:用str.back()获取最后一个字符,比str[str.size()-1]更易读。

如果你的编译器不支持C++11及以上,只需要把范围for循环改回传统索引循环,str.back()替换为str[str.size()-1]即可,逻辑完全一致。

内容的提问来源于stack exchange,提问作者user9857651

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 09:05:46