C/C++根据特定字符分割字符串、读取文件去掉逗号等特定字符、strtok()函数详解

字符串分割情况

  1. 读取文件时,C++识别的是空格和换行符,但有时候文件是以符号分割的,如逗号等
  2. 字符串本身含有特殊符号,如逗号,@等

strtok()函数 

strtok()函数能够按照特定的字符分解字符串为一个个子字符串, 在头文件#include<string.h>

strtok()函数原型

char *strtok(char s[], const char *delim);

参数说明:

  1. s为要分解的字符,字符数组,不是string字符串,这里要注意
  2. delim表示分割的字符,这里是字符指针,注意!!

​​​​​​​如果是string类型,需要对其转换为char类型,才能使用!!!

调用说明:

  1. 首次调用时,s为要分解的字符串
  2. 非首次调用时,需要将s参数设为NULL
  3. 首次调用时,strtok会忽略起始位置开始的分隔符,即若第一个字符是分割符,会被忽略掉

strtok()函数的原理

  • strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL每次调用成功则返回指向被分割出片段的指针
  • 返回值

当s中的字符查找到末尾时,返回NULL

如果查找不到delim中的字符时,返回当前strtok的字符串的指针

  • strtok()函数修改了字符串s的,所以s字符串不能为常量字符串

strtok()函数分割字符串实例

#include<iostream>
#include<string>
using namespace std;
int main()
{
    char str[] = "北京@重庆@深圳@广州";
    char *p;
    cout << "原始字符串为:\n\n" << str << endl;
    cout << endl;
    cout << "分割后的字符串为:\n" << endl;
    p = strtok(str, "@");
    while (p)
    {
        cout << p << "  ";
        p = strtok(NULL, "@");
    }
    return 0;
}

运行结果

 

  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C/C++字符串可以使用分割符来分割成多个子字符串。常见的分割符包括空格、逗号、分号等。下面将介绍两种常用的分割字符串的方法。 1. 使用strtok函数strtok函数是C/C++常用的字符串分割函数,它可以按照指定的分隔符将字符串分割成若干个子字符串。具体使用方法如下: ```c++ #include <iostream> #include <cstring> int main() { char str[] = "C/C++ is a powerful programming language."; const char *delim = " /"; char *token = strtok(str, delim); while (token != nullptr) { std::cout << token << std::endl; token = strtok(nullptr, delim); } return 0; } ``` 上述代码,我们首先定义了一个字符串str,然后定义了分割符delim。然后使用strtok函数字符串str按照分隔符delim进行分割,每次返回的token即为一个子字符串。通过循环遍历直到token为nullptr时,即可将字符串分割为多个子字符串。 2. 使用stringstream类: C++的stringstream类可以将字符串当做输入流进行处理,利用其特性可以方便地进行字符串分割。具体使用方法如下: ```c++ #include <iostream> #include <sstream> #include <string> int main() { std::string str = "C/C++ is a powerful programming language."; std::string token; std::istringstream iss(str); while (std::getline(iss, token, ' ')) { std::cout << token << std::endl; } return 0; } ``` 上述代码,我们首先定义了一个字符串str,然后使用istringstream类将其初始化为输入流。然后使用std::getline函数按空格作为分隔符从输入流逐行读取子字符串,并将其输出。 以上就是使用C/C++进行字符串分割的两种常见方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值