我用 C 语言编写了一个应用程序,它需要两行输入。第一个输入告诉 int 数组有多大,第二个输入包含由空格分隔的值。例如,以下输入
5
1 2 3 4 99
应该创建一个包含{1,2,3,4,99}
最快的方法是什么?我的问题是读取多个数字而不遍历整个字符串检查它是空格还是数字?
谢谢。
int i, size;
int *v;
scanf("%d", &size);
v = malloc(size * sizeof(int));
for(i=0; i < size; i++)
scanf("%d", &v[i]);
完成后记得去free(v)
!
此外,如果由于某种原因您已经在字符串中有数字,您可以使用sscanf()
这里'N'是数组'A'的数组元素数
int N, A[N];
printf("Input no of element in array A: ");
scanf("%d", &N);
printf( "You entered: %d\n", N);
printf("Input array A elements in one line: ");
for(int i=0; i<N; i++){
fscanf(stdin, "%d", &A[i]);
printf( "A[%d] is: %d\n", i, A[i]);
}
这是一个取自http://www.cplusplus.com/reference/cstring/strtok/的示例,我已根据我们的上下文进行了调整。
它将 str 链拆分为子链,然后将每个部分转换为 int。我希望输入行是用逗号分隔的数字,仅此而已。Size 是数组的大小。你应该做 scanf("%d", &size); 正如德尼尔森在他的回答中所说。最后,您将拥有包含所有值的 int 数组。
int main(){
int size = 5, i = 0;
char str[] ="10,20,43,1,576";
int list[size];
char * pch;
printf ("Splitting string \"%s\" into tokens:\n",str);
pch = strtok (str,",");
list[i] = atoi(pch);
i++;
while (pch != NULL)
{
pch = strtok (NULL, ",");
if(pch != NULL)
list[i] = atoi(pch);
i++;
}
for(i=0;i<size;i++){
printf("%d. %d\n",i+1,list[i]);
}
return 0;
}
scanf()
是一种颈部疼痛。检查出strtol()
这种问题,它会让你的生活变得非常轻松。
这段代码采用了一种直接的方法,通过 getchar() 读取每个字符。我们继续读取一个数字,我们发现一个空格。之后数组的索引“i”被更新。这一直重复到 newline('\ n') 遇到
#include<iostream>
main()
{
char ch;
int arr[30] ;
ch =getchar();
int num = 0;
int i=0;
while(ch !='\n')
{
if(ch == ' ')
{
arr[i] = num;
i++;
num = 0;
}
if(((ch -48) >=0) && (ch-48 <=9))
num = (num*10) + (ch - 48);
ch = getchar();
}
arr[i] = num;
for(int j=0;i<=i;j++)
std::cout<<arr[i]<<" ";
}