刷题用到的非常有用的函数c++(持续更新)

阅读导航

字符串处理类

一、stoi()(将字符串转换为整数类型)

在C++中,可以使用 std::stoi() 函数将字符串转换为整数类型。

示例代码如下:

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    std::string str = "12345";
    int num = std::stoi(str);
    std::cout << "The converted integer is: " << num << std::endl;
    return 0;
}

输出结果为:

The converted integer is: 12345

std::stoi() 函数接受一个字符串作为参数,并尝试将其转换为整数类型。如果转换成功,则返回转换后的整数值;如果无法进行有效的转换,将抛出 std::invalid_argumentstd::out_of_range 异常。

需要注意的是,如果字符串中包含除数字以外的字符,或者超出了整数类型的取值范围,那么转换将失败。在使用 std::stoi() 函数时,要确保输入的字符串符合期望的格式和范围,或者进行适当的异常处理。

二、to_string()(将整数类型转换为字符串类型)

在C++中,可以使用 std::to_string() 函数将整数类型转换为字符串类型。

示例代码如下:

cpp 复制代码
#include <iostream>
#include <string>

int main() {
    int num = 12345;
    std::string str = std::to_string(num);
    std::cout << "The converted string is: " << str << std::endl;
    return 0;
}

输出结果为:

The converted string is: 12345

std::to_string() 函数接受一个整数作为参数,并返回对应的字符串表示。它将整数转换为相应的十进制字符串。

需要注意的是,转换后的字符串对象是一个新的副本,原始的整数值并不受影响。

另外,如果需要将其他类型的值转换为字符串,也可以借助字符串流(std::stringstream)和输出流操作符来实现。例如:

cpp 复制代码
#include <iostream>
#include <string>
#include <sstream>

int main() {
    int num = 12345;
    std::stringstream ss;
    ss << num;
    std::string str = ss.str();
    std::cout << "The converted string is: " << str << std::endl;
    return 0;
}

这种方法可用于将各种类型(如浮点数、布尔值等)转换为字符串。

三、stringstream函数(将一个字符串按照指定的分隔符进行分词)

stringstream 是 C++ 标准库中的一个类,它可以将字符串转换为流,从而可以方便地对字符串进行输入输出操作,如分词、格式化等

通过 stringstream,我们可以将一个字符串按照指定的分隔符进行分词。具体使用方法如下:

  1. 首先需要包含头文件 :

    cpp 复制代码
    #include <sstream>
  2. 然后创建一个 stringstream 对象,并将需要分词的字符串传入该对象的构造函数:

    cpp 复制代码
    std::stringstream ss("this is a string");
  3. 使用 while 循环和 >> 运算符,从 stringstream 中逐个读取分词:

    cpp 复制代码
    std::string word;
    while (ss >> word) {
        // 处理分词
    }

    在此代码片段中,每次循环会从 stringstream 中读取一个单词(以空格为分隔符),并将其存储在变量 word 中。

    可以将 >> 运算符看作是一个提取器,它会从 stringstream 中读取下一个可用的值,并将其存储到变量中。当所有的值都被读取完毕时,>> 运算符会返回 false,此时循环会退出。

    可以使用 getline() 函数来按照指定的分隔符读取一整行数据,例如:

    cpp 复制代码
    std::string line;
    getline(ss, line, ','); // 以逗号为分隔符读取一整行数据

如果你需要对字符串进行分词、格式化等操作,stringstream 可以是一个很好的工具。

力扣题目:2512. 奖励最顶尖的 K 名学生

解题代码:

cpp 复制代码
class Solution {
public:
    vector<int> topStudents(vector<string>& positive_feedback, vector<string>& negative_feedback, vector<string>& report, vector<int>& student_id, int k) {
        map<std::string, int> words;
        for (const auto& word : positive_feedback) 
        {
            words[word] = 3;
        }
        for (const auto& word : negative_feedback) 
        {
            words[word] = -1;
        }
        vector<vector<int>> A;
        for (int i = 0; i < report.size(); i++) 
        {
            stringstream ss;
            string w;
            int score = 0;
            ss << report[i];
            while (ss >> w) 
            {
                if (words.count(w)) 
                {
                    score += words[w];
                }
            }
            A.push_back({-score, student_id[i]});
        }
        sort(A.begin(), A.end());
        vector<int> top_k;
        for (int i = 0; i < k; i++) 
        {
            top_k.push_back(A[i][1]);
        }
        return top_k;
    }
};
相关推荐
爱吃喵的鲤鱼几秒前
linux进程的状态之环境变量
linux·运维·服务器·开发语言·c++
DARLING Zero two♡27 分钟前
关于我、重生到500年前凭借C语言改变世界科技vlog.16——万字详解指针概念及技巧
c语言·开发语言·科技
7年老菜鸡28 分钟前
策略模式(C++)三分钟读懂
c++·qt·策略模式
Gu Gu Study29 分钟前
【用Java学习数据结构系列】泛型上界与通配符上界
java·开发语言
Ni-Guvara36 分钟前
函数对象笔记
c++·算法
似霰40 分钟前
安卓智能指针sp、wp、RefBase浅析
android·c++·binder
芊寻(嵌入式)1 小时前
C转C++学习笔记--基础知识摘录总结
开发语言·c++·笔记·学习
獨枭1 小时前
C++ 项目中使用 .dll 和 .def 文件的操作指南
c++
霁月风1 小时前
设计模式——观察者模式
c++·观察者模式·设计模式
橘色的喵1 小时前
C++编程:避免因编译优化引发的多线程死锁问题
c++·多线程·memory·死锁·内存屏障·内存栅栏·memory barrier