C++ 如何拆分字符串

C++ 如何拆分字符串

本主题将讨论如何将给定的字符串拆分成单个单词,在C++编程语言中。当我们将一组词语或字符串集合拆分为单个单词时,称之为拆分或字符串的分割。然而,拆分字符串只能使用一些分隔符,如空格(),逗号(,),连字符(-)等,使单词成为独立的。此外,没有预定义的拆分函数来将字符串集合分割为单个字符串。因此,在这里我们将学习在C++中将字符串拆分为单个字符串的不同方法。

C++ 如何拆分字符串

在C++中实现字符串拆分的不同方法

  1. 使用strtok()函数拆分字符串
  2. 使用自定义的split()函数拆分字符串
  3. 使用std::getline()函数拆分字符串
  4. 使用find()和substr()函数拆分字符串

使用strtok()函数拆分字符串

strtok(): 使用strtok()函数可以根据传入的定界符将原始字符串拆分为片段或标记。

语法:

char *ptr = strtok( str, delim)

在上述语法中,strtok()有两个参数, strdelim

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()函数存储字符串的当前位置并移动到下一个标记,这个过程会一直持续,直到我们获取到所有的拆分字符串为止。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程