分割std::string成多个string
文章目录
- 问题描述
- 前置知识
- 解决代码
问题描述
假设我们有一个http服务器,此服务器接收客户端发来的http请求,假设请求如下
GET / HTTP/1.1
我们怎么将这个Http请求分割成三份,分别存入不同的string中分别处理?
前置知识
首先std::string
的本身存于stack中,但是std::string
指向的string存于Heap中,std::string
在stack作用域消失的时候自动清除Heap中的字符串
关于std::string
的操作
假设我们有一个std::string
如下
std::string s;
我们可以有以下的操作
寻找指定字符
s.find('c');
寻找std::string s
中的字符c
的位子,且返回其下标
s.find('c', 10);
从std::string s
的下标10开始寻找字符c
,且返回其下标
注意下标是从1开始算,而不是0
我们的find找到最后可能会返回一个不存在的数字,这个数字就是
std::string::npos;
,我们可以将这个数字当成find的结束符号(如果find在循环中)
分割字符串成子字符串
s.substr(start, end);
对于std::string s
从index为start开始到index为end结束(不包括end)的字符串截取出来返回
比如我们有一个字符串
"hello world"
我们对其做s.substr(0, 7);
结果是返回"hello w"
,也就是返回index从0到6的字符串
index是从0开始
解决代码
那么我们就非常容易解决上述问题
#include <iostream>
//#include <thread>
#include <string>
#include <vector>int main(){std::vector<std::string> v;std::string s{"GET / HTTP/1.1"};std::string::size_type start = 0;std::string::size_type end = s.find(' ');for(int i = 0; i < 3; i++){if(end == std::string::npos) v.push_back(s.substr(start, s.length()));std::cout << s.substr(start, end-start) << "\n";v.push_back(s.substr(start, end-start));start = ++end;end = s.find(' ', end);}/*for(auto i: v){std::cout << i <<'\n';} */
}