当前位置: 代码迷 >> C语言 >> 不知道数组大小,应该怎么办啊
  详细解决方案

不知道数组大小,应该怎么办啊

热度:173   发布时间:2006-03-18 06:39:00.0
不知道数组大小,应该怎么办啊

这是谭教授书上的一道习题:
输入一个字符串,内有数字和非数字符,例如
A123X456 17690? 302TAB5876
将其中连续的数字作为一个整数,依次存放到一数组a中。例如,123放在a[0],456放在a[1]中。统计共有多少整数,并输出这些数。
本人弱智,实在想不通,这个数组的大小应该怎么样确定啊?并哥哥姐姐们指教!谢谢了!只提示一下就可以了!

搜索更多相关的解决方案: 哥哥姐姐  字符串  统计  

----------------解决方案--------------------------------------------------------
#include <stdio.h>
#include <conio.h>
#define MAX 30
main()
{
int i,j,count=0;
char source[MAX]="A123X456 17690? 302TAB5876",*p=source,*temp;
int a[MAX];
for (i=0;i<MAX;i++)
a[0]=0;
while (*p)
{
if (*p>='0'&&*p<='9')
{
while (*p>='0'&&*p<='9'&&*p)
{
a[count]=a[count]*10+*p-'0';
p++;
}
count++;
}
else
p++;
}
printf("count=%d\n",count);
for (i=0;i<count;i++)
printf("a[%d]=%d\n",i,a[i]);
getch();
return 0;
}

可能程序还有一些小问题。
----------------解决方案--------------------------------------------------------
以下是引用cordier在2006-3-18 7:59:00的发言:
#include <stdio.h>
#include <conio.h>
#define MAX 30
main()
{
int i,j,count=0;
char source[MAX]="A123X456 17690? 302TAB5876",*p=source,*temp;
int a[MAX];
for (i=0;i<MAX;i++)
a[0]=0; //改为a[i]=0 就行了,否则只有一,二个数输出正确
while (*p)
{
if (*p>='0'&&*p<='9')
{
while (*p>='0'&&*p<='9'&&*p)
{
a[count]=a[count]*10+*p-'0';
p++;
}
count++;
}
else
p++;
}
printf("count=%d\n",count);
for (i=0;i<count;i++)
printf("a[%d]=%d\n",i,a[i]);
getch();
return 0;
}

可能程序还有一些小问题。


----------------解决方案--------------------------------------------------------
有个弱智点的方法,先讨论最坏的情况,BT用户输入了个极其BT的字符串 1`1`1`1`1`1 用户输入了11个字符,最坏的可能就是有11/2+1个数字出现,则我们让数组的大小定义为用户输入字符串长度N的 N/2+1 即可。语句是

int *number,n;
scanf("%d",&n);
number = (int*)malloc(sizeof(int)*(n*2-1));

这样就完成了定义数组大小的任务。当然这个方法比较傻,如果你有实力,可以用链表去实现这个功能,实在不行用realloc()函数改变数组长度也不错~

[此贴子已经被作者于2006-3-18 8:33:24编辑过]


----------------解决方案--------------------------------------------------------
以下是引用cordier在2006-3-18 7:59:00的发言:
#include <stdio.h>
#include <conio.h>
#define MAX 30
main()
{
int i,j,count=0;
char source[MAX]="A123X456 17690? 302TAB5876",*p=source,*temp;
int a[MAX];
for (i=0;i<MAX;i++)
a[0]=0;
while (*p)
{
if (*p>='0'&&*p<='9')
{
while (*p>='0'&&*p<='9'&&*p)
{
a[count]=a[count]*10+*p-'0';
p++;
}
count++;
}
else
p++;
}
printf("count=%d\n",count);
for (i=0;i<count;i++)
printf("a[%d]=%d\n",i,a[i]);
getch();
return 0;
}

可能程序还有一些
这个兄弟理解错了,我说的那些数组是举例,而在程序中数组是要输入的.所以比较麻烦啊

----------------解决方案--------------------------------------------------------
请问四楼的哥们:整型指针变量能够直接定义用吗?我不懂!
----------------解决方案--------------------------------------------------------

dynamic memory malloc


----------------解决方案--------------------------------------------------------
没有人可以帮我吗?
----------------解决方案--------------------------------------------------------
提示: 作者被禁止或删除 内容自动屏蔽
2008-03-30 09:43:12
jamesbind

等 级:新手上路
帖 子:45
专家分:0
注 册:2008-3-21
  得分:0 
老谭的意思就是定义一个足够大的 数组。
----------------解决方案--------------------------------------------------------
  相关解决方案