如何从具有嵌入式null的字符数组中提取std :: string

用户名

我有一个已知长度的字符数组,带有嵌入的空值;没有结尾为null。

const char * raw = "text1\0\0text2\0\0\0text3\0more text";

这样做

std::string clean(raw);

仅给我第一个字符串("text1"),但我需要整个原始字符串。

我想要多个字符串。在这种情况下,里面有4个字符串raw.

来自莫斯科的弗拉德

在不知道字符串文字的实际大小的情况下,您将无法执行此任务。如果知道大小,则可以使用构造函数

basic_string(const charT* s, size_type n, const Allocator& a = Allocator());

或相应的方法 assign

在这里,第二个参数指定将在字符串中复制的s的字符数。

如果长度是已知的,那么您可以简单地写

std::string clean( raw, n );

或者

std::string clean;
clean.assign( raw, n );

编辑:当您更改了原始消息后,我将附加我的帖子。您可以按以下方式拆分文字

#include <iostream>
#include <sstream>
#include <string>
#include <vector>

int main()
{
    const char * s = "text1\0\0text2\0\0\0text3\0more text";
    size_t n = 30;
    std::istringstream is( std::string( s, 30 ) );

    std::vector<std::string> v;
    std::string word;
    while ( std::getline( is, word, '\0' ) ) if ( !word.empty() ) v.push_back( word );

    for ( const std::string &s : v ) std::cout << s << std::endl;
}

输出是

text1
text2
text3
more text

如果您有四个不同的字符串,则可以编写

#include <iostream>
#include <sstream>
#include <string>

int main()
{
    const char * s = "text1\0\0text2\0\0\0text3\0more text";
    size_t n = 30;
    std::istringstream is( std::string( s, 30 ) );

    std::string word1, word2, word3, word4;
    while ( std::getline( is, word1, '\0' ) && word1.empty() );
    while ( std::getline( is, word2, '\0' ) && word2.empty() );
    while ( std::getline( is, word3, '\0' ) && word3.empty() );
    while ( std::getline( is, word4, '\0' ) && word4.empty() );

    for ( const std::string &s : { word1, word2, word3, word4 } ) std::cout << s << std::endl;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何正确地将带有String()方法的嵌入式结构序列化为JSON字符串?

从 Array<Dictionary<String,String>> 中提取字符串数组的有效方法

如何使用Roslyn查找被调用方法的参数是变量(通过“ var / string”)还是嵌入式字符串

如何从String中提取数据?

如何从SVG文件中提取嵌入式图像?

如何从Wix刻录安装程序中提取嵌入式有效负载?

如何从嵌入式字典/列表中提取所有值

如何在Swift中创建嵌入式JSON对象并返回String?

使用ffmpeg从具有嵌入式封面的文件中提取视频封面/缩略图

如何从String Builder中提取json对象?

提示如何从List <string>中提取文本

如何从splunk中的String中提取数据?

从std :: string提取整数

如何获取具有嵌入式键值对数组的PyMongo文档的值(实时)

从具有行的键值属性的枚举中提取Map <String,Object>?

Swift-如何从具有String属性的对象数组中创建字符串?

如何编写具有嵌入式ID的JPQL SELECT?

Null <std :: string>的问题

std :: string的指针数组

在JSOUP中提取到嵌入式资源的链接的最有效方法

如何在Java中提取JSON数组的特定字段并将其存储在String中

如何从对象列表中提取元素并存储在String数组中

java:如何从Map <String,Collection <Map <String,String >>>中提取值

如何从使用interface {}输入的golang map [string]字符串中提取值

如何从反应堆核心中的Mono <String>中提取字符串

如何在mongoDB中的嵌入式文档中提取特定元素

如何从三星的Motion Photo jpeg文件中提取嵌入式视频

string 和 powershell 从数组中提取用户名

如何验证变量可以具有NULL或String格式