📅  最后修改于: 2023-12-03 15:37:34.944000             🧑  作者: Mango
当我们需要处理以逗号分隔的字符串时,我们需要解析这些字符串以从中提取出有用的信息。在C++中,我们可以使用标准库提供的函数进行解析处理。
下面是一个简单的例子,演示如何解析包含逗号分隔的字符串:
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
int main()
{
std::string input = "apple,orange,banana,grape";
std::vector<std::string> tokens;
std::istringstream ss(input);
std::string token;
while (std::getline(ss, token, ','))
{
tokens.push_back(token);
}
for (const auto& t : tokens)
{
std::cout << t << std::endl;
}
return 0;
}
在这个例子中,我们首先定义了一个包含逗号分隔的字符串"apple,orange,banana,grape"。接着,我们定义了一个字符串向量tokens,用来保存分隔开的字符串。然后,我们使用std::istringstream类来解析这个字符串。最后,我们将解析后的字符串逐个加入tokens向量中,并输出tokens向量中的每一个元素。
使用std::getline函数可以方便地解析以逗号分隔的字符串。这个函数接受三个参数:输入流、字符串、和分隔符。
std::getline函数会从输入流中读取字符,直到遇到指定的分隔符。在本例中,我们指定的分隔符是','。一旦遇到分隔符,它就会自动停止读取,并将读取到的字符存储在输入的字符串中。然后,std::getline函数返回true,表示成功读取到一个字符串。如果没有读取到字符串,就会返回false。
这种解析逗号分隔字符串的方法有一个缺点,就是它只适用于逗号分隔的字符串。如果需要使用其他分隔符,就需要修改分隔符的参数。
在解析逗号分隔的字符串时,通常需要取消空白符,例如空格和制表符。下面是一个示例代码,演示如何在解析过程中删除空白符:
#include <iostream>
#include <sstream>
#include <vector>
#include <string>
int main()
{
std::string input = "apple, orange, banana, grape";
std::vector<std::string> tokens;
std::istringstream ss(input);
std::string token;
while (std::getline(ss >> std::ws, token, ','))
{
tokens.push_back(token);
}
for (const auto& t : tokens)
{
std::cout << t << std::endl;
}
return 0;
}
在这个例子中,我们使用了std::ws参数来取消空白符。它是一个std::ios_base类型的标志,可以告诉std::getline函数在提取下一个字符串之前忽略所有前导空白符。