正在将字符串转换为int数组
Converting string into int array
我有以下问题。我想将像"10 15 30"
这样的字符串转换为具有int 10, 15, 30
的int数组。我在谷歌上搜索了很多,但通常解决方案包括向量(我不熟悉)或其他更复杂的解决方案。我发现了一个这样的代码:
#include <cstdio>
void foo ( char *line ) {
int num, i = 0, len;
while ( sscanf( line, "%d%n", &num, &len) == 1 ) {
printf( "Number %d is %d; ", i, num );
line += len;
i++;
}
}
int main ( ) {
char test[] = "12 45 6 23 100";
foo( test );
return 0;
}
它以我想要的方式工作并从字符串中提取数字,但我不理解的部分
line += len;
有人能解释一下它是如何工作的吗?为什么要将len
(即int
)添加到字符串中?
C++解决方案:
#include <iostream>
#include <sstream>
#include <vector>
std::vector< int > foo ( char *c_str ) {
std::istringstream line( c_str );
std::vector< int > numbers;
for ( int n; line >> n; )
numbers.push_back( n );
return numbers;
}
int main ( ) {
char test[] = "12 45 6 23 100";
std::vector< int > numbers = foo( test );
for ( int n : numbers )
std::cout << n << ' ';
return 0;
}
输出:
12 45 6 23 100
%n
指定sscanf
在一次执行中访问的字符数,并将其保存在变量len中。因此line + =len;
递增变量line
,sscanf
访问的字符数
line + =len;
不过是line =line+ len;
line += len;
等效于line = line + len;
line
是一个char指针,因此每当执行循环时,代码都会将指针增加len
,以便指针指向下一个数字。注意,len
是通过对sscanf()
的调用来更新的。
char test[]="12 45 6 23 100";
比如*line指向测试,并且有一些指针值,我们不在乎这个值本身是什么,所以假设它是1000。在第一次调用sscanf之后,您在中读取"12"。这是两个字符,所以len应该返回2。行然后被设置为1002,并且现在"指向"缓冲区中的下一组字符。sscanf读取该内容,并继续执行此操作,直到缓冲区中不再有字符为止。
查看sscanf文档。它接收格式和附加参数。
在params中,您有"%d%n"
,您可以使用文档中的格式表进行解释。
d或u
十进制整数
任意数量的十进制数字(0-9),可选择前面加一个符号(+或-)。d表示有符号的参数,u表示无符号的参数。
n
计数
没有消耗任何输入。到目前为止从stdin读取的字符数存储在指向的位置。
所以您可以从字符串中读取integer,以及这个整数所包含的字符数。
读取字符串的一部分后,将指针移动到已读取的字符数中。
sscanf(行,"%d%n",&num,&len)
这一行从行中读取一个数字,并将数字放入num,将读取的字符数放入len。
我们需要len将指针移动到字符串的未读部分。
这有道理吗?
有用的链接:scanfsscanf
- 按字符值访问int数组
- 将 int 数组转换为 std::vector<int*>
- C++,在int数组中输入字符串或字符会输出0,而不是ascii或error
- 整数区间(或 int 数组)中每个数字的出现次数
- Int 数组到C++容器
- C++ 未初始化的本地(非全局)int 数组中的元素类型到底是什么?
- 如何检测将文本文件读入 int 数组的新行
- C++快速将 int 数组内容转储到文本文件中
- <string> 如何在使用 SWIG 时将 int 数组和 List 作为参数传递给 C# C++
- 如何制作不允许重复值的 C++ int 数组循环?
- 如何将逗号分隔的文件读取为 2D int 数组?
- int 数组,但索引是字符?
- 使用可变参数函数将整数和/或整数数组放入单个 int 数组中
- 将 int 数组转换为带有小数C++的双精度数组
- 将双精度值分配给 int 数组时的类型转换
- 已编辑 我如何将其拆分为 char 和 int 数组
- 从 C++ 中的 int ** 数组访问元素
- C++程序无法分配 int 数组?
- 我正在编写一个代码来将 int 数组存储在文件中,然后用 c++ 检索它,但是检索第一项是假值,我该如何解决这个问题?
- 如何通过头文件中的函数初始化 const int 数组?