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

C++中如何获取string类型vector各元素的首字符

获取C++ string vector中每个元素首字符的几种实现方法

嘿,这个需求其实挺常见的,我给你分享几种C里的实现方式,你可以根据自己的代码风格和使用的C版本来选~

方法1:范围for循环(C++11及以后推荐)

这种写法最直观简洁,也是现在C++里比较推荐的遍历方式。我们先创建一个vector<char>来存储提取出的首字符,然后逐个遍历原vector里的字符串,取出第一个字符即可。

#include <vector>
#include <string>

int main() {
    std::vector<std::string> subjects = {"chemistry", "physics", "maths"};
    std::vector<char> first_chars;

    // 遍历每个学科字符串,提取首字符
    for (const auto& s : subjects) {
        // *重要提示*:如果你的vector里可能有空字符串,一定要加判断:if (!s.empty())
        first_chars.push_back(s[0]);
    }

    // 此时first_chars中的元素就是 {'c', 'p', 'm'}
    return 0;
}

方法2:传统索引式for循环(兼容旧版C++)

如果你的开发环境还在使用C++03或更早的标准,没法用范围for,那传统的索引遍历就很合适:

#include <vector>
#include <string>

int main() {
    std::vector<std::string> subjects;
    subjects.push_back("chemistry");
    subjects.push_back("physics");
    subjects.push_back("maths");
    std::vector<char> first_chars;

    for (size_t i = 0; i < subjects.size(); ++i) {
        // 同样建议加空字符串判断,避免访问非法内存
        if (!subjects[i].empty()) {
            first_chars.push_back(subjects[i][0]);
        }
    }

    return 0;
}

方法3:用STL的transform算法(函数式风格)

如果你习惯用STL的算法工具,std::transform可以帮你一行完成转换,代码更紧凑:

#include <vector>
#include <string>
#include <algorithm> // 必须包含这个头文件才能用transform

int main() {
    std::vector<std::string> subjects = {"chemistry", "physics", "maths"};
    std::vector<char> first_chars(subjects.size()); // 提前分配好空间,效率更高

    std::transform(subjects.begin(), subjects.end(), first_chars.begin(),
                   [](const std::string& s) { 
                       return s.empty() ? '\0' : s[0]; // 这里处理了空字符串的情况
                   });

    return 0;
}

额外提醒:不管用哪种方法,都要注意处理空字符串的情况——如果原vector里有长度为0的字符串,直接访问s[0]会导致未定义行为,所以最好加上!s.empty()的判断哦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 20:03:11