📜  在字符向量 C++ 上拆分字符串(1)

📅  最后修改于: 2023-12-03 14:51:26.184000             🧑  作者: Mango

在字符向量 C++ 上拆分字符串

在 C++ 中,我们可能需要拆分一个字符串并将其存储到一个字符向量中。拆分字符串的过程并不复杂,但需要考虑到一些细节。这篇介绍将会从以下几个方面来讲解如何在字符向量 C++ 上拆分字符串:

  1. 根据指定的分隔符拆分字符串
  2. 将字符串转换为小写并拆分
  3. 去除字符串中的空格并拆分
根据指定的分隔符拆分字符串

下面是一个示例代码,根据指定的分隔符拆分字符串并将其存储到字符向量中。

#include <iostream>
#include <sstream>
#include <vector>

std::vector<std::string> split(const std::string& s, char delimiter)
{
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream(s);
    while (getline(tokenStream, token, delimiter))
    {
        tokens.push_back(token);
    }
    return tokens;
}

int main()
{
    std::string s = "hello,world,how,are,you";
    char delimiter = ',';
    std::vector<std::string> tokens = split(s, delimiter);
    for (const auto& token : tokens)
    {
        std::cout << token << std::endl;
    }
    return 0;
}

代码中,我们使用了istringstream类型的变量来将字符串转换为一个流,并使用getline函数从流中按指定的分隔符读取每个子字符串。

将字符串转换为小写并拆分

有时,我们需要将字符串转换为小写,然后再进行拆分。下面是一个示例代码:

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>

std::vector<std::string> splitAndLowercase(std::string& s, char delimiter)
{
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream;
    std::transform(s.begin(), s.end(), s.begin(), [](unsigned char c){ return std::tolower(c); });
    tokenStream.str(s);
    while (getline(tokenStream, token, delimiter))
    {
        tokens.push_back(token);
    }
    return tokens;
}

int main()
{
    std::string s = "Hello,World,how,are,you";
    char delimiter = ',';
    std::vector<std::string> tokens = splitAndLowercase(s, delimiter);
    for (const auto& token : tokens)
    {
        std::cout << token << std::endl;
    }
    return 0;
}

代码中,我们使用了transform函数将字符串中的每个字符转换为小写字母。然后,我们再像之前一样使用istringstream类型的变量将字符串转换为流并进行拆分。

去除字符串中的空格并拆分

在进行字符串拆分之前,有时候我们需要先将字符串中的空格去除。下面是一个示例代码:

#include <iostream>
#include <sstream>
#include <vector>
#include <algorithm>

std::vector<std::string> splitAndTrim(const std::string& s, char delimiter)
{
    std::vector<std::string> tokens;
    std::string token;
    std::istringstream tokenStream(s);
    while (getline(tokenStream, token, delimiter))
    {
        token.erase(0, token.find_first_not_of(' '));
        token.erase(token.find_last_not_of(' ') + 1);
        tokens.push_back(token);
    }
    return tokens;
}

int main()
{
    std::string s = "  Hello,  World , how, are , you  ";
    char delimiter = ',';
    std::vector<std::string> tokens = splitAndTrim(s, delimiter);
    for (const auto& token : tokens)
    {
        std::cout << token << std::endl;
    }
    return 0;
}

代码中,我们使用了erase函数和find_first_not_of函数以及find_last_not_of 函数将每个子字符串中的空格去除。然后,我们再像之前一样使用istringstream类型的变量将字符串转换为流并进行拆分。

结束语:这篇文章介绍了如何在字符向量 C++ 上拆分字符串。除了基本的字符串拆分外,我们还讨论了在拆分之前将字符串转换为小写以及去除字符串中的空格。希望这些技巧能够帮助到你在日常编程中处理字符串。