C++ 如何拆分字符串
本主题将讨论如何将给定的字符串拆分成单个单词,在C++编程语言中。当我们将一组词语或字符串集合拆分为单个单词时,称之为拆分或字符串的分割。然而,拆分字符串只能使用一些分隔符,如空格(),逗号(,),连字符(-)等,使单词成为独立的。此外,没有预定义的拆分函数来将字符串集合分割为单个字符串。因此,在这里我们将学习在C++中将字符串拆分为单个字符串的不同方法。
在C++中实现字符串拆分的不同方法
- 使用strtok()函数拆分字符串
- 使用自定义的split()函数拆分字符串
- 使用std::getline()函数拆分字符串
- 使用find()和substr()函数拆分字符串
使用strtok()函数拆分字符串
strtok(): 使用strtok()函数可以根据传入的定界符将原始字符串拆分为片段或标记。
语法:
char *ptr = strtok( str, delim)
在上述语法中,strtok()有两个参数, str 和 delim 。
str : str是一个原始字符串,strtok()函数用于分割字符串。
delim :它是用于分割字符串的字符。例如,逗号(,)、空格( )、连字符(-)等。
返回值 :它返回一个指针,指向下一个字符标记的位置。最初,它指向字符串的第一个标记。
注意:strtok()函数会修改原始字符串,并在每次调用strtok()函数时在分隔符位置放置一个空字符(‘\0’)。通过这种方式,可以轻松跟踪标记的状态。
使用strtok()函数拆分字符串的程序
让我们以一个示例来说明如何使用strtok()函数拆分C++字符串。
Program.cpp
#include
#include
using namespace std;
int main()
{
char str[100]; // declare the size of string
cout << " Enter a string: " <
输出
Enter a string:
Learn how to split a string in C++ using the strtok() function.
Split string using strtok() function:
Learn
how
to
split
a
string
in
C++
Using
the
strtok()
function.
使用自定义split()函数拆分字符串的程序
让我们编写一个程序,使用自定义split()函数在C++中拆分字符串序列。
Program2.cpp
#include
#include
#define max 8 // define the max string
using namespace std;
string strings[max]; // define max string
// length of the string
int len(string str)
{
int length = 0;
for (int i = 0; str[i] != '\0'; i++)
{
length++;
}
return length;
}
// create custom split() function
void split (string str, char seperator)
{
int currIndex = 0, i = 0;
int startIndex = 0, endIndex = 0;
while (i <= len(str))
{
if (str[i] == seperator || 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 seperator = ' '; // space
split(str, seperator);
cout <<" The split string is: ";
for (int i = 0; i < max; i++)
{
cout << "\n i : " << i << " " << strings[i];
}
return 0;
}
输出
The split string is:
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()函数来拆分字符串
getline()函数是C++标准库函数,用于从输入流中读取字符串并将它们放入字符串向量中,直到找到定界符字符。我们可以通过导入<string>
头文件来使用 std::getline() 函数。
语法
getline(str, token, delim);
它有三个参数:
str: str是一个存储原始字符串的变量。
token: 它存储从原始字符串中提取的字符串标记。
delim: 它是用于分割字符串的字符。例如,逗号(,)、空格( )、连字符(-)等。
使用getline()函数拆分字符串的程序
让我们来看一个使用C++中的getline()函数拆分字符串的示例。
Program3.cpp
#include
#include
#include
#include
using namespace std;
int main()
{
string S, T; // declare string variables
getline(cin, S); // use getline() function to read a line of string and store into S variable.
stringstream X(S); // X is an object of stringstream that references the S string
// use while loop to check the getline() function condition
while (getline(X, T, ' ')) {
/* X represents to read the string from stringstream, T use for store the token string and,
' ' whitespace represents to split the string where whitespace is found. */
cout << T << endl; // print split string
}
return 0;
}
输出
Welcome to the JavaTpoint and Learn C++ Programming Language.
Welcome
to
the
JavaTpoint
and
Learn
C++
Programming
Language.
使用getline()函数拆分给定字符串的程序
让我们考虑一个使用getline()函数拆分给定字符串的示例。
Program4.cpp
#include
#include
#include
#include
void split_str( std::string const &str, const char delim,
std::vector &out )
{
// create a stream from the string
std::stringstream s(str);
std::string s2;
while (std:: getline (s, s2, delim) )
{
out.push_back(s2); // store the string in s2
}
}
int main()
{
std:: string s2 = "Learn How to split a string in C++";
const char delim = ' '; /* define the delimiter like space (' '), comma (,), hyphen (-), etc. */
std::cout << "Your given string is: " << s2;
std::vector out; // store the string in vector
split_str (s2, delim, out); // call function to split the string
// use range based for loop
for (const auto &s2: out)
{
std::cout << "\n" << s2;
}
return 0;
}
输出
Your given string is: Learn How to split a string in C++
Learn
How
to
split
a
string
in
C++
使用find()和substr()函数分割字符串
让我们编写一个程序,在C++中使用find()函数和substr()函数来分割给定的字符串。
Program4.cpp
#include
#include
using namespace std;
int main()
{
// given string with delimiter
string given_str = "How_to_split_a_string_using_find()_and_substr()_function_in_C++";
string delim = "_"; // delimiter
cout << " Your string with delimiter is: " << given_str << endl;
size_t pos = 0;
string token1; // define a string variable
// use find() function to get the position of the delimiters
while (( pos = given_str.find (delim)) != std::string::npos)
{
token1 = given_str.substr(0, pos); // store the substring
cout << token1 << endl;
given_str.erase(0, pos + delim.length()); /* erase() function store the current positon and move to next token. */
}
cout << given_str << endl; // it print last token of the string.
}
输出
Your string with delimiter is: 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()函数存储字符串的当前位置并移动到下一个标记,这个过程会一直持续,直到我们获取到所有的拆分字符串为止。