杭州网站建设,制作手机软件的软件,ip备案信息查询,重庆巴南区网站开发一、概述
在 Java 和 python 中#xff0c;都有实现字符串切分的方法#xff0c; 如split() #xff0c;使用起来较为方便#xff0c;但是在标准的 C 中#xff0c;却没有内置的 split() 方法。
我们可以使用标准库中的一些函数和方法来实现字符串的切分#xff0c;这里…一、概述
在 Java 和 python 中都有实现字符串切分的方法 如split() 使用起来较为方便但是在标准的 C 中却没有内置的 split() 方法。
我们可以使用标准库中的一些函数和方法来实现字符串的切分这里主要使用到了C STL 中的 字符串流对象stringstream和 getline()函数 来实现字符串的切分。 二、stringstream 和 getline 简介
2.1 stringstream 类
stringstream 是 C STL 中的一个类定义于 sstream 头文件中sstream是stringstream的缩写。通过stringstream 可以将字符串作为输入输出流来处理类似于 cin 和 cout 对标准输入输出流的操作stringstream 可进行针对于字符串的输入输出操作
示例代码如下
#include iostream
#include sstream
using namespace std;int main() {// 创建一个 stringstream 对象 ss并初始化其内容stringstream ss(I Love You ! ! !);// 从 ss 中逐个读取单词输出到s然后输出到屏幕string s;while (ss s) {cout s;}cout endl;// 清除流的状态标志以重新定位ss.clear();// 将读取位置设置为开头以便从头开始读取流中的内容ss.seekg(0);// 将 ss 中的内容设置为 3 2 1覆盖原有内容ss.str(3 2 1);// 从 ss 中逐个读取整数并输出int t;while (ss t) {cout t ;}cout endl;return 0;
}运行结果 2.2 getline()函数
getline() 是 C STL 中的一个函数用于从输入流中读取一行字符串。
该函数接受3个参数 1. 输入流对象istream通常是 cin 或 文件流对象。 2. 输出字符串string读取的字符串将存储于该变量。 3. 分隔符可缺省用于指定结束符如不指定分隔符参数则默认为换行符 \n 。 示例代码如下
#include iostream
#include string
using namespace std;
int main() {string input;cout please input a string endl;// 默认换行符为结束符getline(cin, input);cout input string: [ input ] endl;cout \nplease input a string again endl;// 指定空格作为结束符getline(cin, input, );cout input string: [ input ] endl;return 0;
}
运行结果 2.3 相关参考
关于字符串流对象 stringstream 的详细用法可以参考
cplusplus.com/reference/sstream/stringstream/
关于 getline()函数 可以参考
cplusplus.com/reference/string/string/getline/ 三、切分方法
3.1 切分步骤 1. 创建字符串流对象使用目标字符串待切分的字符串对其进行初始化。 2. 以字符串流对象为输入流对象使用 getline() 函数以指定的结束符为结束标志依次读取输入的字符串。 3. 循环进行 2 直到结束。期间每次都会持续读取到指定的分隔符后结束此时可直接处理子串或者递归对子串进行处理以此实现对字符串的切分。 3.2 举例
姓名:时栈,性别:男,地区:陕西,爱好:游泳 对于上述字符串可以先以逗号为分隔符对于切分下来的子串再使用冒号作为分隔符。 四、示例代码
对于上述子串使用上述步骤进行切分代码如下
#include iostream
#include sstream
#include vector
using namespace std;
typedef pairstring, string PSS;// 该函数使用 delimiter 将 str 切分为键值对
// 并返回pairstring, string 的数组
vectorPSS split(string str, char delimiter){stringstream ss(str);string keyValueStr;vectorPSS ret;// 从 ss 中读取数据读取到delimiter符号为止并将读到的内容存储到keyValueStrwhile(getline(ss, keyValueStr, delimiter)){// 使用stringstream处理keyValueStr以提取键和值stringstream kvs(keyValueStr);string keyStr, valueStr;getline(kvs, keyStr, :);getline(kvs, valueStr, :);// 存储键值对到vector中ret.push_back( {keyStr, valueStr} );}return ret;
}int main(){// 待切分的字符串string str1 姓名:时栈,性别:男,地区:陕西,爱好:游泳;string str2 日期:2024年3月14日; 农历:二月初五; 天气:多云; 星期:周四;// 根据字符串的特点进行切分vectorPSS kv1 split(str1, ,);vectorPSS kv2 split(str2, ;);// 输出kv1cout kv1: endl;for(PSS t : kv1) cout t.first t.second endl;// 输出kv2// 这里可以对kv2中的包含的空格进一步处理处理过程此处省略cout \nkv2: endl;for(PSS t : kv2) cout t.first t.second endl;return 0;
}
运行结果 如有不当或错误之处恳请您的指正谢谢