分割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 
//#include 
#include 
#include 

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';
    } 
    */  
}

你可能感兴趣的:(c++,开发语言)