将带有数字的字符串存储为整数数组
Store string with numbers as an integer array
我正在用 C 编写一个程序,其中有用户输入。此输入是一个字符串,其整数值由 space 分隔。数字(第一个除外)必须存储在整数数组中。第一个数字表示必须存储多少个数字(因此数组的大小)。
在 C 中执行此操作的最简单方法是什么?这是一个例子:
input--> "5 76 35 95 14 20"
array--> {76, 35, 95, 14, 20}
我一直在四处寻找,但找不到解决我的问题的方法。目前,我尝试将输入的值存储在一个字符数组中,当有 space 时,我使用 atoi()
将此字符串转换为整数并将其添加到整数大批。但它打印出奇怪的值。这是代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char text[10];
scanf("%s", text);
int nums[4];
int indNs = 0;
char lastNum[10];
int indLN = 0;
for(int i = 0; i < 10; i++)
{
if(text[i] == ' ')
{
nums[indNs] = atoi(lastNum);
indNs++;
sprintf(lastNum, "%s", "");
indLN = 0;
} else
{
lastNum[indLN] = text[i];
indLN++;
}
}
nums[indNs] = atoi(lastNum);
for(int i = 0; i < 4; i++)
{
printf("%d\n", nums[i]);
}
}
在这种情况下,您可以使用例如在 header <stdlib.h>
.
中声明的标准 C 函数 strtol
例如
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
const char *s = "5 76 35 95 14 20";
char *p = ( char * )s;
int n = ( int )strtol( p, &p, 10 );
int *a = malloc( n * sizeof( int ) );
for ( int i = 0; i < n; i++ )
{
a[i] = strtol( p, &p, 10 );
}
for ( int i = 0; i < n; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
free( a );
}
程序输出为
76 35 95 14 20
要读取带空格的字符串,您应该使用标准 C 函数 fgets
。
您不能使用 scanf
读取 space 分隔的输入,因为 scanf
将在输入白色后停止读取 space。
scanf("%s", text); //Wrong, always reads only first number.
您可以使用 fgets
后跟 sscanf
和 %n
循环。
char buf[100];
int *array = NULL;
int numElements = 0;
int numBytes = 0;
if (fgets(buf, sizeof buf, stdin)) {
char *p = buf;
if (1 == sscanf(buf, "%d%n", &numElements,&numBytes)){
p +=numBytes;
array = malloc(sizeof(int)*numElements);
for (int i = 0;i<numElements;i++){
sscanf(p,"%d%n", &array[i],&numBytes);
p +=numBytes;
printf("%d,", array[i]);
}
}
}
%n
returns number of bytes read so far thus advance the buf
number
of bytes read so far.
如果您不是在处理 strings
而是直接从 stdin
读取数据,那么您不需要那些乱七八糟的东西。
int *array = NULL;
int numElements = 0;
scanf("%d", &numElements);
array = malloc(sizeof(int)*numElements);
for(int i=0;i<numElements;i++)
{
scanf("%d", &array[i]);
printf("%d ", array[i]);
}
我正在用 C 编写一个程序,其中有用户输入。此输入是一个字符串,其整数值由 space 分隔。数字(第一个除外)必须存储在整数数组中。第一个数字表示必须存储多少个数字(因此数组的大小)。
在 C 中执行此操作的最简单方法是什么?这是一个例子:
input--> "5 76 35 95 14 20"
array--> {76, 35, 95, 14, 20}
我一直在四处寻找,但找不到解决我的问题的方法。目前,我尝试将输入的值存储在一个字符数组中,当有 space 时,我使用 atoi()
将此字符串转换为整数并将其添加到整数大批。但它打印出奇怪的值。这是代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char text[10];
scanf("%s", text);
int nums[4];
int indNs = 0;
char lastNum[10];
int indLN = 0;
for(int i = 0; i < 10; i++)
{
if(text[i] == ' ')
{
nums[indNs] = atoi(lastNum);
indNs++;
sprintf(lastNum, "%s", "");
indLN = 0;
} else
{
lastNum[indLN] = text[i];
indLN++;
}
}
nums[indNs] = atoi(lastNum);
for(int i = 0; i < 4; i++)
{
printf("%d\n", nums[i]);
}
}
在这种情况下,您可以使用例如在 header <stdlib.h>
.
strtol
例如
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
const char *s = "5 76 35 95 14 20";
char *p = ( char * )s;
int n = ( int )strtol( p, &p, 10 );
int *a = malloc( n * sizeof( int ) );
for ( int i = 0; i < n; i++ )
{
a[i] = strtol( p, &p, 10 );
}
for ( int i = 0; i < n; i++ )
{
printf( "%d ", a[i] );
}
putchar( '\n' );
free( a );
}
程序输出为
76 35 95 14 20
要读取带空格的字符串,您应该使用标准 C 函数 fgets
。
您不能使用 scanf
读取 space 分隔的输入,因为 scanf
将在输入白色后停止读取 space。
scanf("%s", text); //Wrong, always reads only first number.
您可以使用 fgets
后跟 sscanf
和 %n
循环。
char buf[100];
int *array = NULL;
int numElements = 0;
int numBytes = 0;
if (fgets(buf, sizeof buf, stdin)) {
char *p = buf;
if (1 == sscanf(buf, "%d%n", &numElements,&numBytes)){
p +=numBytes;
array = malloc(sizeof(int)*numElements);
for (int i = 0;i<numElements;i++){
sscanf(p,"%d%n", &array[i],&numBytes);
p +=numBytes;
printf("%d,", array[i]);
}
}
}
%n
returns number of bytes read so far thus advance thebuf
number of bytes read so far.
如果您不是在处理 strings
而是直接从 stdin
读取数据,那么您不需要那些乱七八糟的东西。
int *array = NULL;
int numElements = 0;
scanf("%d", &numElements);
array = malloc(sizeof(int)*numElements);
for(int i=0;i<numElements;i++)
{
scanf("%d", &array[i]);
printf("%d ", array[i]);
}