论坛首页 编程语言技术论坛

又一道笔试题

浏览 1745 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2008-10-15  
C

题目:用一个char指针*p指向一个字符串常量,在不使用第三方变量的情况下统计出该字符串的长度。
如:以char *p = "Hello World"; 为例。

    如果是用数组来存储该字符串的话很容易得出其长度:sizeof(arrayName)/sizeof(char).但是这里使用的是字符指针,因为题目的要求就是不使用三方变量求出字符串长度,因此如果能够想办法创造出存储空间而又不增加变量的话就能解决该问题。看到这里大家或许想到了我所用的方法就是利用指针p来使用字符串所占用的空间来存储其长度信息。

main()
{
    char* p="hello world";
    printf("%d",p);
    *p=1;  //第一个位置放置1
    p++;   //指向下一个位置
    while(*p!='\0') //没有到字符串结束
    {
        p++; 
        *(p-1)=*(p-2)+1; //将前一个空间存储的长度信息加1存储到后一个空间
    }
    printf("%d", *(p-1)); 
  }
在WinTC下面可以编译运行得出正确的结果。在网友的提示下发现VC和g++编译环境下该程序不能正确运行,因为他们会将常量存放在.data段,数据段是只可读不可写的。

大家有更好的想法可以发出来大家共享。

   发表时间:2008-10-15  
这类问题多用递归,

int string_len (const char *p)
{
    if (*p == '\0') return 0;
    return string_len (++p) + 1;
}
0 请登录后投票
   发表时间:2008-10-17  
谢谢这位兄弟提供新的思路 呵呵
若问题是递归的,采用递归的确可以少使用很多变量。
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics