C++教程-如何在C++中拆分字符串?
如何在C++中拆分字符串?
本主题将讨论如何在C++编程语言中将给定的字符串拆分为单个单词。当我们将一组单词或字符串集合分成单个单词时,称为拆分或分割字符串。然而,只有使用某些分隔符(如空格( ),逗号(,),连字符(-)等)才能将字符串拆分为单个单词,使得单词成为单独的。此外,在C++中没有预定义的拆分函数来将字符串集合拆分为单个字符串。因此,我们将学习在C++中拆分字符串为单个字符串的不同方法。
如何在C++中拆分字符串
在C++中实现字符串拆分的不同方法
- 使用strtok()函数拆分字符串
- 使用自定义的split()函数拆分字符串
- 使用std::getline()函数拆分字符串
- 使用find()和substr()函数拆分字符串
使用strtok()函数拆分字符串
strtok():strtok()函数用于根据传递的分隔符将原始字符串拆分为片段或标记。
语法
char *ptr = strtok(str, delim)
在上述语法中,strtok()有两个参数,str和delim。 广告
str:str是要从中拆分字符串的原始字符串。
delim:它是用于拆分字符串的字符。例如,逗号(,),空格(),连字符(-)等。
返回值:它返回一个指针,指向下一个字符标记。初始时,它指向字符串的第一个标记。
注意:strtok()函数会修改原始字符串,并在每次调用strtok()函数时,在分隔符位置放置一个空字符('0')。这样,它可以轻松追踪标记的状态。
使用strtok()函数拆分字符串的程序
让我们通过一个使用strtok()函数在C++中拆分字符串的示例来理解。
Program.cpp
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str[100]; // 声明字符串的大小
cout << "输入一个字符串:" << endl;
cin.getline(str, 100); // 使用getline()函数从输入流中读取字符串char *ptr; // 声明一个指针ptr
ptr = strtok(str, " , "); // 使用strtok()函数使用逗号(,)作为分隔符来分隔字符串
cout << "使用strtok()函数拆分字符串:" << endl;
// 使用while循环来检查ptr是否为空
while (ptr != NULL)
{
cout << ptr << endl; // 打印字符串标记
ptr = strtok(NULL, " , ");
}
return 0;
}
输出
输入一个字符串: Learn how to split a string in C++ using the strtok() function.
使用strtok()函数拆分字符串: Learn how to split a string in C++ Using the strtok() function.
使用自定义的split()函数拆分字符串
让我们编写一个程序,使用自定义的split()函数在C++中拆分字符串序列。
Program2.cpp
cppCopy code
#include <iostream>
#include <string>
#define max 8 // 定义最大字符串
using namespace std;
string strings[max]; // 定义最大字符串 // 字符串长度
int len(string str)
{
int length = 0;
for (int i = 0; str[i] != '\0'; i++)
{
length++;
}
return length; } // 创建自定义的split()函数
void split(string str, char separator)
{
int currIndex = 0, i = 0;
int startIndex = 0, endIndex = 0;
while (i <= len(str))
{ if (str[i] == separator || i == len(str)) { endIndex = i;
string subStr = "";
subStr.append(str, startIndex, endIndex - startIndex);
strings[currIndex] = subStr;
currIndex += 1;
startIndex = endIndex + 1;
}
i++;
}
}
int main()
{
string str = "Program to split strings using custom split function.";
char separator = ' '; // 空格
split(str, separator);
cout << "拆分后的字符串为:";
for (int i = 0; i < max; i++)
{
cout << "\n i : " << i << " " << strings[i];
}
return 0;
}
输出
拆分后的字符串为:
i: 0 Program
i: 1 to
i: 2 split
i: 3 strings
i: 4 using
i: 5 custom
i: 6 split
i: 7 function.
使用std::getline()函数拆分字符串
std::getline()函数是C++的标准库函数,用于从输入流中读取字符串并将其放入字符串向量中,直到找到分隔符字符为止。我们可以通过导入头文件<string>来使用std::getline()函数。
语法
getline(str, token, delim);
它有三个参数:
str:一个变量,用于存储原始字符串。
token:存储从原始字符串提取的字符串标记。
delim:用于拆分字符串的字符。例如,逗号(,),空格(),连字符(-)等。
使用getline()函数拆分字符串的程序
让我们通过一个使用getline()函数在C++中拆分字符串的示例来理解。
Program3.cpp
#include <iostream>
#include <string>
#include <vector>
#include <sstream>
using namespace std;
int main()
{ string S, T; // 声明字符串变量
getline(cin, S); // 使用getline()函数读取一行字符串并存储到S变量中
stringstream X(S); // X是一个引用S字符串的stringstream对象
// 使用while循环来检查getline()函数的条件
while (getline(X, T, ' '))
{
/* X表示从stringstream读取字符串,T用于存储标记字符串,' '表示在找到空格时拆分字符串。 */
cout << T << endl; // 打印拆分的字符串
}
return 0;
}
输出:
欢迎来到JavaTpoint和学习C++编程语言。
欢迎
来到
JavaTpoint
和
Learn
C++
编程
语言。
使用find()和substr()函数拆分字符串
让我们编写一个程序,在C++中使用find()函数和substr()函数来拆分给定的字符串。
Program4.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 带有分隔符的给定字符串
string given_str = "How_to_split_a_string_using_find()_and_substr()_function_in_C++";
string delim = "_"; // 分隔符
cout << " 带有分隔符的字符串是:" << given_str << endl;
size_t pos = 0;
string token1; // 定义一个字符串变量
// 使用find()函数获取分隔符的位置
while ((pos = given_str.find(delim)) != std::string::npos)
{
token1 = given_str.substr(0, pos); // 存储子字符串
cout << token1 << endl;
given_str.erase(0, pos + delim.length()); /* erase()函数存储当前位置并移动到下一个标记。 */
}
cout << given_str << endl; // 打印字符串的最后一个标记
}
输出:
给定的字符串是:
Learn
How
to
split
a
string
in C++
使用find()和substr()函数拆分字符串
让我们编写一个程序,在C++中使用find()函数和substr()函数来拆分给定的字符串。
Program4.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
{
// 带有分隔符的给定字符串
string given_str = "How_to_split_a_string_using_find()_and_substr()_function_in_C++";
string delim = "_"; // 分隔符
cout << " 带有分隔符的字符串是:" << given_str << endl;
size_t pos = 0;
string token1; // 定义一个字符串变量
// 使用find()函数获取分隔符的位置
while ((pos = given_str.find(delim)) != std::string::npos)
{
token1 = given_str.substr(0, pos); // 存储子字符串
cout << token1 << endl;
given_str.erase(0, pos + delim.length()); /* erase()函数存储当前位置并移动到下一个标记。 */
}
cout << given_str << endl; // 打印字符串的最后一个标记
}
输出:
带有分隔符的字符串是:How_to_split_a_string_using_find()_and_substr()_function_in_C++
How
to
split
a
string
using
find()
and
substr()
function
in
C++
在上面的程序中,我们在循环内部使用find()函数来重复查找给定字符串中分隔符的出现位置,然后在分隔符出现时将其拆分为标记。substr()函数存储要打印的子字符串。另外,erase()函数存储字符串的当前位置并移动到下一个标记,这个过程会一直进行,直到我们获取到所有拆分的字符串。