c语言输入一行未知个数数字存入数组

一直有个疑问输入一行数字存入数组时若不知道数字的个数怎么办,最容易想到的办法就是接收字符然后转化为数字,但这样太过麻烦。

今天上网查了下,说可以用ungetc()函数将字符送回输入流,在这里总结归纳一下

此外还意外的解决了另外一些以前遇到的问题,也是在调试代码时发现的,用此段代码可以用除了空格以外的字符作为分隔符,而且分隔符的长度也可以很长:如输入12qwertyuiop34asdfghjkl123,23zxc45  最后得到的数组为:a[0]=12,a[1]=34,a[2]=123,a[3]=23,a[4]=45

先贴上代码:

 1 #include<stdio.h>
 2 #include<ctype.h>
 3 int main()
 4 {
 5     int a[1000];
 6     char c;
 7     int i=0;
 8     int n=0;
 9     while((c=getchar())!=‘\n‘)
10     {
11         if(isdigit(c))
12         {
13             ungetc(c,stdin);//将c送回输入流
14             scanf("%d",&a[n++]);
15         }
16     }
17     for(i=0;i<n;i++)
18     {
19         printf("%d ",a[i]);
20     }
21     return 0;
22 }

这里要说明一下,在使用空格作为分隔的时候把14行的scanf函数放到if语句外面可以减少循环次数

但是用其他符号作为分隔符的时候只能放在if语句中,不然会出错

这里又有另一个问题了,一开始怎么知道数组的长度,定义多少合适呢?

  1. 如果预先可以估计数组的大小,那么可以比估计的数值定义的稍大一些即可
  2. 如果无法预知,我的解决办法就是使用链表,但是这样就无法使用数组的一些特性,比如可能会花很多的时间去寻找某一下标的数据
  3. 另外我想到的就是牺牲存储空间的办法,先用链表将数据存起来,并记录个数。如果后面需要多次利用下标访问数据的话,可动态分配一块内存来存储数据,并将原来的链表释放,或根据需要保留
  4. 除此之外也没想到有什么好的方法。。。
时间: 2024-08-05 00:09:13

c语言输入一行未知个数数字存入数组的相关文章

如何用C保存一行未知个数的数字?

同学做华为的上机题,问我这样一个问题,如何保存一行未知个数的数字? 首先想说的是,华为的上机题目真是坑爹啊,给个n告诉一下数字个数会死啊?他们下午做的题目还有一个是位复制的,输入和题目完全对应不上,真是不知道怎么出的题目,能不能学学code jam或者其他平台的题目,用点心好不好. 其次说说这个问题是怎么样的. 很多时候也许我们也会碰到这样的问题,知道输入时很多行,而且每一行都是有未知个数的数字,可能1个,2个,3个这样.我们现在不考虑把全部数据都读进来的情况,因为这样很简单,只需要用用个whi

java输入数字存入数组(带字符检测)

这一次是上次字符检测是否全为数字的增强版. 欢迎各位朋友或大神指出不足之处. package com.hw.h817; import java.util.Scanner; public class Check { public static void main(String[] args){ Scanner s = new Scanner(System.in); //把pre和str在外面定义,如果在循环中定义会出错 String[] two = new String[6]; String pr

[C语言]输入一行整数,用空格分开,回车结束。

在屏幕一行中的字符会保留在缓冲区,例如 1 2 3 4 5 6 scanf把1读入存入数组中,getchar把空格读入,以此往后遍历.所以我们只需判断getchar()得到的是否是'\n'即可. for( i = 0; i < n; i++) { scanf("%d",&cur); array[i] = cur; char c = getchar(); if (c == '\n') { break; } } 刚入坑的编程新手,有错欢迎指正批评. 谢谢~ 原文地址:http

c语言输入字符串转化为数字

/*输入一个以回车结束的字符串,它由数字字符组成,将该字符串转换成整数后输出.**输入提示信息:"Enter a string: "**输出格式要求:"digit = %d\n"*/ #include <stdio.h> int main(){  unsigned long n = 0;  char c;  printf("Enter a string: ");  while ((c = getchar()) != '\n')  { 

把数字存入数组,并逆序输出

void main() { int i=0,k; char c[10]; while(n) { c[i]=n%10+'0'; //把数字变成字符,因为这是一个char数组 n/=10; i++; } s[i--]='\0'; k=i; while(i>=0) { s[i]=c[k--]; //先让s[i]变为'\0'再令 i-1 i--; //把  k-i  变成  i   则变成逆序输出 }} 原文地址:https://www.cnblogs.com/P-juan/p/10057833.htm

c语言:输入一行字符,分别统计出其中英文字母、空格、数字和其他字符的个数。

输入一行字符,分别统计出其中英文字母.空格.数字和其他字符的个数. 解:程序: #include <stdio.h> int main() { char c; int letters=0,space=0,digit=0,other=0; printf("请输入一行字符:"); while ((c=getchar())!='\n') { if (c >= 'a'&&c <= 'z' || c >= 'A'&&c <= '

代码实现:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。

import java.util.Scanner; import java.util.TreeMap; //输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. public class Test { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("请输入一行字符:"); String s = sc.nextLine(); c

华为OJ——输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数

题目描述 输入一行字符,分别统计出包含英文字母.空格.数字和其它字符的个数. 输入描述: 输入一行字符串,可以有空格 输出描述: 统计其中英文字符,空格字符,数字字符,其他字符的个数 输入例子: 1qazxsw23 edcvfr45tgbn hy67uj m,ki89ol.\\/;p0-=\\][ 输出例子: 26 3 10 12 <span style="font-size:18px;">import java.util.*; public class Main { pu

输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数

题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 程序分析:利用while语句,条件为输入的字符不为 '\n '. 1 package com.li.FiftyAlgorthm; 2 3 import java.util.Scanner; 4 5 /** 6 * 题目:输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. 7 * 8 * 程序分析:利用while语句,条件为输入的字符不为 '\n ' 9 * @author yejin 10 */ 11 pu