读书人

求算法优化或见解解决方法

发布时间: 2012-02-08 19:52:21 作者: rapoo

求算法优化或见解
Q:
在一字符串中存在 0x00 也就是‘\0’,但后面有其他值,现在需要计算字符串长度
例子:unsigned char a[100] = {0x10,0x11,0x00,0x12,0x00,0x13} 期望得到的长度为6

现在本人的解法为,感觉有问题,求指点

C/C++ code
int fun{unsigned char str[],int len}{  while(str[len-1] != '\0')    len--;  return len;}int main(){  unsigned char a[100] = {0x10,0x11,0x00,0x12,0x00,0x13};  int len = sizeof(a);  int char_num = fun(a,len);  printf("char_num = %d\n",char_num);  return 0;}
}

[解决办法]
while(str[len-1] == '\0')
[解决办法]
探讨
Q:
在一字符串中存在 0x00 也就是‘\0’,但后面有其他值,现在需要计算字符串长度
例子:unsigned char a[100] = {0x10,0x11,0x00,0x12,0x00,0x13} 期望得到的长度为6

现在本人的解法为,感觉有问题,求指点

C/C++ code

int fun{unsigned char str[],int len}
{
while……

[解决办法]
此题无解,原因:需求不清,相互冲突。
上面几个回答运行可能得到正确结果的原因是,
unsigned char a[100] = {0x10,0x11,0x00,0x12,0x00,0x13};
定义在常量区,常量区在编译时,未设置的数据区域都被设成了0。但在实际应用时,并不一定这100个字符后94个都是"\0"。

C语言以"\0"定义为字符串结束,而你说的需求中又把"\0"做为数据使用,那么什么是结束符?
这个算法的需求根本就是自相矛盾的,不完整的。你的需求的来源是不是有union code的字符串要处理?
[解决办法]
unsigned char a[100] = {0x10,0x11,0x00,0x12,0x00,0x00,0x00};
如果这样你想得到7??你让编译器情何以堪啊

读书人网 >C++

热点推荐