看看我编的一个取得字符串长度的函数。
编辑器:TC2.0
操作系统:WIN98
个人水平:刚接触C。
我自已编了一个,获取输入的字符串长度的函数。下面的程序经过测试可以达到预期效果,请大家帮我看看我的思路对不对,再看看我的代码是否有改进的地方(对自已没信心)。
/*这是一个取得输入字符串长度的程序 2004-5-4*/
#include<stdio.h>
main()
{
char *str; /*字符型指针变量,用于存放输入字符串的首字符地址*/
scanf("%s",&*str); /*取得输入的字符串并把首地址赋给指针*/
getchar();
printf("%d\n",strleght(str));
getchar();
}
/*计算字符串长度的函数*/
int strleght(char *strvar)
{
int js;
for(js=1;*strvar!='\0';js++)/*当检测到字符尾退出循环*/
{
*strvar++;
}
return(js-1);/*减掉字符尾,得到的实际字符个数并返回给函数*/
}
注:请问,C中有没有现成获取字符串长度的函数。
问题点数:20、回复次数:8Top
1 楼cngdzhang()回复于 2004-05-04 17:53:23 得分 0
有
#include <string.h>
char str[100]="hello";
strlen(str);
Top
2 楼newegg2002(同志们,同胞们,大学的四年,是扎实基础的四年!!)回复于 2004-05-04 17:54:52 得分 5
scanf("%s",&*str); //这句scanf("%s",str); 这样不就行了么..
这不只是个习惯问题,,要理解scanf后面那个参数的真正含义..
有这样的函数啊..最为常见是就是
#include <string.h>
int strlen(char *c);Top
3 楼cngdzhang()回复于 2004-05-04 17:55:25 得分 10
我写一个 :)
int myStrlen(char *s)
{
char *p=s;
while(*p) ++p;
return(p-s);
}
Top
4 楼cngdzhang()回复于 2004-05-04 17:59:31 得分 0
#include<stdio.h>
main()
{
char *str; //这里不对,改为char *str[100]要先分配内存
scanf("%s",&*str); //scanf("%s",str);就行,但是scanf输入不了,有空格的字符串 gets可以
getchar();
printf("%d\n",strleght(str));
getchar();
}
改为
#include<stdio.h>
main()
{
char str[1000];
gets(str);
printf("%d\n",strleght(str));
getchar();
}
Top
5 楼antijpn(antijpn)回复于 2004-05-04 18:16:00 得分 5
要这么长吗?
可以更加简单的
unsigned int strlength(const char *const str)
{
unsigned int iLength=0;
while(*str++)
iLength++;
return iLength;
}
或者
unsigned int strlength(const char * const str)
{
unsigned int iLength=0;
for(iLength=0;*str++;iLength++)
NULL;
return iLength;
}Top
6 楼cg_i(半点闲)回复于 2004-05-04 18:45:04 得分 0
非常的感谢大家~~~~还有些不懂之处请教:
1、strlen这个函数,可不可以获取任意长度的字符串长度。
2、scanf("%s",&*str); //这句scanf("%s",str); 这样不就行了么..(谢谢了,下去我再看看书研究一下)。
3、char *str; //这里不对,改为char *str[100]要先分配内存如果改成这样的
先分配内存后,是不是会降低函数的通用性呢(会影响其接受任意长度的字符)?
初学问题多,请大家不吝赐教。。。。
Top
7 楼cngdzhang()回复于 2004-05-04 18:54:03 得分 0
是我写多了一个* ,,不好意思
char *str; //这里不对,改为char *str[100]要先分配内存
改为
char *str; //这里不对,改为char str[100]要先分配内存
strlen这个函数,可以啊,可以获得任意长度的字符串长度,
当然,字符串总是有长度限制的,现实中很少会有数百兆的字符串的
如果要动态长度
可以这样:
char *str;
str=(char *)malloc(1000*sizeof(char)); //动态分配
free(str); //释放
或
char *str;
str=new char[1000]; //动态分配
delete []str; //释放
Top
8 楼tangxiaosan001(阿三)回复于 2004-05-04 19:36:09 得分 0
^_^。Top




