如何将字符串中的值分成数组

Posted

技术标签:

【中文标题】如何将字符串中的值分成数组【英文标题】:How to separate values in string into Array(s) 【发布时间】:2018-07-31 15:52:50 【问题描述】:

我想将不同数据类型的字符串放入单独的数组中,假设我有以下字符串(在每一行中,每个“字段”用空格“”分隔):

string s = "1 2 3 Hello_world
            3 4 1 Hi_world   
            1 5 3 Bye_world"

我想把这个字符串放入 4 个单独的数组中,每个数组都是每列中的值,所以显示时会显示如下内容:

s[0] = 1, 3, 1
s[1] = 2, 4, 5  
s[2] = 3, 1, 3  
s[3] = Hello_world, Hi_world, Bye_world

如何初始化和实现这些数组?其他语言都有一个叫做 split 的函数(C#、php 等),那 C++ 呢?

另外,我只能使用数组,不能使用向量。请有人指教。谢谢!

【问题讨论】:

***.com/questions/236129/… C++ 有std::istringstream 创建一个由std::stringstreams 组成的数组,每个数组包含一行。试着找出其余的。 【参考方案1】:

既然你有一个字符串,让我们把它变成一个流:

std::istringstream input_stream(s);

模式似乎是字符串的每一行都将成为目标数组的下一个元素。

int a[3];
int b[3];
int c[3];
std::string d[3];

int i;
int index = 0;
input_stream >> i;
a[index] = i;

input_stream >> i;
b[index] = i;

input_stream >> i;
c[index] = i;

std::string t;
input_stream >> t;
d[index] = t;

上面的片段是一次迭代。

OP 的一个任务是将片段转换成循环来处理字符串的每一行。

【讨论】:

我尝试了您的方法并尝试将其置于循环中...但它无法编译并给出以下错误:无法转换'std::string aka std::basic_string'赋值给'int' a[counter] = s; b[计数器] = s; c[计数器] = s;以下是我的代码: int a[14];诠释 b[14];诠释 c[14];字符串 d[14];整数计数器 = 0; istringstream inputStream(s); for(string t; ​​inputStream >> t;) a[counter] = t; b[计数器] = t; c[计数器] = t; d[计数器] = t;计数器++; 让我的代码看起来更有条理。请参考下文。 不要将代码放入 cmets;它变得难以阅读。使用新文本编辑您的帖子。【参考方案2】:

您需要的是一个 Tokenizer 例程,它可以将您的字符串拆分为带有特定分隔符的子字符串(在一种情况下为“\n”,在另一种情况下为“”)。然后您可以将生成的子字符串保存到一个或多个向量中 (std::vector vectorOfStrings;)

在这里查看答案:

How do I tokenize a string in C++?

【讨论】:

您好,感谢您的回复。但是,除了vector还有其他方法吗?因为我试图在不使用矢量的情况下做到这一点。 你也可以使用一个普通的旧数组:std::string arrOfStrings[3];

以上是关于如何将字符串中的值分成数组的主要内容,如果未能解决你的问题,请参考以下文章

在SQL中如何从数组中获取值再进行查询

根据值中的第一个字符将数组分成多个数组

怎样将数组作为Sql中IN的查询条件

如何将char数组中的值与另一个char进行比较

将字符串中的值分配给变量数组

将字符串拆分为标记并将标记分成两个单独的数组