Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在cpp中查找第一个出现的字符(而不是从字符串的开头)?_C++_String_Find_Substring - Fatal编程技术网

C++ 如何在cpp中查找第一个出现的字符(而不是从字符串的开头)?

C++ 如何在cpp中查找第一个出现的字符(而不是从字符串的开头)?,c++,string,find,substring,C++,String,Find,Substring,我有这个字符串: Content-Disposition: form-data; name="file"; filename="file001.docx" 我想写一个函数来获取名称,但它似乎不起作用 首先,我使用find来定位字符串name=,然后我搜索了第一个,但是我得到了错误的子字符串。有人能帮忙吗 这是我的密码: unsigned int start = 0; HEADER_NAME = "name=" start = myString.find(HEADER_N

我有这个字符串:

Content-Disposition: form-data; name="file"; filename="file001.docx"
我想写一个函数来获取名称,但它似乎不起作用

首先,我使用find来定位字符串name=,然后我搜索了第一个,但是我得到了错误的子字符串。有人能帮忙吗

这是我的密码:

    unsigned int start = 0;
    HEADER_NAME = "name="
    start = myString.find(HEADER_NAME);
    if (start != std::string::npos)
    {
        unsigned int pos = 0;
        pos  = myString.find("\"\"", start+ HEADER_NAME.length()  +1);
        std::string name111 = myString.substr(start + HEADER_NAME.length() + 1 , pos - 1);
    }
我得到:文件;filename=file001.docx作为名称111

当我使用另一个字符串时:Content Disposition:form data;name=请求 我收到一个请求

由于某些原因,pos值始终为4

有人能告诉我怎么了吗?我似乎找不到丢失的东西

非常感谢

您使用的字符串::substr不正确。 第一个参数是子字符串第一个字符的索引,第二个参数是子字符串的长度。而是发送最后一个字符的索引。这就是为什么子字符串到达原始字符串的末尾

请尝试以下代码:

size_t substr_start = static_cast<size_t>(start) + HEADER_NAME.length() + 1;
size_t substr_length = static_cast<size_t>(pos) - substr_start;
std::string name111 = myString.substr(substr_start , substr_length);
搜索name=\并将标题_name.length添加到找到的开始
std::string name111 = myString.substr(start + HEADER_NAME.length() + 1 , pos - 1);