如何在C++中拆分字符串?

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

1.png

如何在C++中拆分字符串

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

  1. 使用strtok()函数拆分字符串
  2. 使用自定义的split()函数拆分字符串
  3. 使用std::getline()函数拆分字符串
  4. 使用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()函数存储字符串的当前位置并移动到下一个标记,这个过程会一直进行,直到我们获取到所有拆分的字符串。

标签: C++语言, C++语言教程, C++语言技术, C++语言学习, C++语言学习教程, C++语言下载, C++语言开发, C++语言入门教程, C++语言进阶教程, C++语言高级教程, C++语言面试题, C++语言笔试题, C++语言编程思想