读书人

数组中存了几多字

发布时间: 2013-08-01 15:23:18 作者: rapoo

数组中存了多少字?
定一个数组:a[30];
在程序中赋值for(i=0;i<20;i++){a[i] = i;}

如何算出数组中存了多少个字,不能利用i的值。strlen(a) 不行,因为第一个就是0了,直接退出来,还可以有什么算法吗???
[解决办法]


char *p = a;
char *end = p + 30;
char v = 0;
while (p < end)
{
if (*p != v) break;
++p;
++v;
}

// 存了v个

[解决办法]
引用:
Quote: 引用:


char *p = a;
char *end = p + 30;
char v = 0;
while (p < end)
{
if (*p != v) break;
++p;
++v;
}

// 存了v个



我用for(i=0;i<20;i++){a[i] = i;}

这样赋值是可以算出来,但如果随机赋值呢?比如a[]={0x00,0x32,0x00,0x034,0x04};这样呢,能算出来吗?


数组初始化成一个不会赋值的值,假设0xFF,
然后判断0xFF结尾
如果赋值随机,不存在不会赋到的值,那么就无法判断了。

[解决办法]
如果字符型数组的话,可以算出来.
但是如果是其他类型的数组,恐怕难以计算了.
[解决办法]
当看存了多少字节, 或者楼主想说, 多少字节是你赋值得到的, 那么跟你说, 这是不可能的.
因为内存里本身就是一些字节, 你能分清哪些是你修改过的, 哪些不是吗?
根本就没有一个判断依据.
比如字符串, 还有0为为结束依据. 而当是字节, 并且是随机的, 那就没有依据了, 也就无从判断结束了, 所以不可能实现楼主想要的需求.
[解决办法]
需要有一个结束的标识,不然不知道如何结束。
[解决办法]
先把数组初始化
譬如都初始化成 -1(这个给成你不可能给到的值)

赋值完遍历数组,统计不是 -1的数字就是赋值过的
[解决办法]
main()
{
int i;
int j;
int a[30];
for(i=0;i<20;i++)
{
a[i]=i;
printf("%d",a[i]);


if(i%4==0) printf("\n");
if(i%20) i++;
}
printf("\n");
printf("数组个数为:%d",i);
}


[解决办法]
LZ根据你的意思,肯定不能是随机赋值,
你都初始化为0, 然后随机几个再赋值成0,问赋值了几个?


strlen(a+1) + 1;

[解决办法]
引用:
定一个数组:a[30];
在程序中赋值for(i=0;i<20;i++){a[i] = i;}

如何算出数组中存了多少个字,不能利用i的值。strlen(a) 不行,因为第一个就是0了,直接退出来,还可以有什么算法吗???


这个。。。为什么需要这样的要求?

为了判断数组是否越界吗?

如果非要知道,自己程序加个计数就行了!对于你说的那个初始化的情况,那个只能靠自己!作为程序员,你有责任也必须知道如何管理自己的程序!
[解决办法]
引用:
Quote: 引用:

定一个数组:a[30];
在程序中赋值for(i=0;i<20;i++){a[i] = i;}

如何算出数组中存了多少个字,不能利用i的值。strlen(a) 不行,因为第一个就是0了,直接退出来,还可以有什么算法吗???


这个。。。为什么需要这样的要求?

为了判断数组是否越界吗?

如果非要知道,自己程序加个计数就行了!对于你说的那个初始化的情况,那个只能靠自己!作为程序员,你有责任也必须知道如何管理自己的程序!


说对了

读书人网 >C语言

热点推荐