c语言 计算字符串长度
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c语言 计算字符串长度相关的知识,希望对你有一定的参考价值。
C语言的字符串是由字符数组形式保存的,并约定'\\0'(ascii码值为0)作为字符串结束符。其长度为从字符串开始,到'\\0'结束,所有字符的个数,不包括'\\0'本身。
要获得字符串长度,有两种方法可以使用,使用库函数strlen()。strlen声明在string.h中,原型为int strlen(char *str);功能为求str的长度,并返回。对于字符串str, 可以用代码求长度。当str[len]为0时,退出循环,退出后的len值就是str的长度。
拓展资料:使用strlen函数,包含在头文件string.h里,功能就是计算字符串s的(unsigned int型)不包括'\\0'在内的长度。
参考技术AC语言计算字符串长度,可以手动计算也可以使用库函数或者sizeof()操作符。
方法:
自定义函数求长度
使用strlen()函数
使用sizeof()操作符
自定义函数:
int cont_str(char *s)
int i = 0;
while ( str[i++] != '\\0') ;
return i;
使用string头文件中的strlen()函数:
strlen(str); //假设str为待求的字符串数组名
使用sizeof()操作符:
sizeof(str)/sizeof(str[0]); //假设str为待求的字符串数组名
注意:
strlen()函数求出的字符串长度为有效长度,既不包含字符串末尾结束符 ‘\\0’;
sizeof()操作符求出的长度包含字符串末尾的结束符 ‘\\0’;
当在函数内部使用sizeof()求解由函数的形参传入的字符数组的长度时,得到的结果为指针的长度,既对应变量的字节数,而不是字符串的长度,此处一定要小心。
首先要分清楚:字符数组和字符串的关系!
字符串存放在数组中,因此,一个字符数组可以存放几个串,单字符串函数只认字符串结束标志'\0';
1. strlen(wer wer):字符串为"wer_wer"这种字符串常量,系统会在其后自动补上'\0';而求字符串长度的函数strlen()只要遇见'\0';就返回函数值!而且'\0'不算在其中!故返回值为7(空格也算一个字符!)
2. strlen(wer\0wer) 其中的字符串为"wer\0wer"而strlen函数遇到'\0'即结束,故返回值为:3
3. '\0'不是空格,也不是回车!通过ASCII码表,你可知道,'\0'是ASCII码值代表0(NULL);而空格的ASCII码为: '\32' 32 回车的ASCII码值为'\13' 13
希望对你有所帮助!!!!
=============================================================Mr_Compuerr 参考技术C 你的代码出现问题的原因是scanf("%s",&a); ,a是一个char类型的变量,系统为它分配了一个字节的内存空间,但是你却输入了一个字符串到以a的地址为首地址的一段连续的内存空间里,这样就出现了越界错误.但是printf函数并不检查越界错误,它会按正常的方法执行,然后程序统计出长度,打印出来结果.但是返回到调用main函数的操作系统后,系统会发现越界错误,所以在结果显示出来后才出错.至于你说的输入5个以下不会出错,也许是偶然,也许跟你的编译器有关.我用VS2005测试,只要输入就会出错。
如果你是只想求出输入的字符串的长度而不要求保存输入的字符串,下面的代码更好。你的标准输入缓冲区有多大,那么它就可以求出多长的字符串的长度,不会有越界。
#include<stdio.h>
int main()
int len=0;
//getchar()函数从标准输入设备(即键盘)接收一个字符,返回该字符的ASCII码.因为回车被输入时被转换成换行符(LF,ASCII码为10),所以getchar()返回10时就知道输入结束了.
while(getchar()!=10) len++;
printf("It's length is %d.\n",len);
return 0;
参考技术D
C语言的字符串是由字符数组形式保存的,并约定'\\0'(ascii码值为0)作为字符串结束符。
其长度为从字符串开始,到'\\0'结束,所有字符的个数,不包括'\\0'本身。
要获得字符串长度,有两种方法可以使用:
1 使用库函数strlen()。
strlen声明在string.h中,原型为
int strlen(char *str);
功能为求str的长度,并返回。
2 根据定义求长度。
对于字符串str, 可以用如下代码求长度:
int len;for(len = 0; ; len ++)
if(str[len] == '\\0')break;
当str[len]为0时,退出循环,退出后的len值就是str的长度。
C语言怎么计算字符长度?
输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个
数。(现在只学到循环。。。)
3楼的正确,2楼的运行结果有错误。但是3楼的我还没学过,指针还没学。。。
main()
char
str[10000];
/*定义一个输入10000长度的字符*/
int
i;
int
blank=0;
/*空格*/
int
big_string=0;
/*大写字母*/
int
small_string=0;
/*小写字母*/
int
number=0;
/*数字*/
int
rest=0;
/*其他*/
printf("Please
put
a
string:\n");
gets(str);
/*输入段字符*/
for(i=0;str[i]!='\0';i++)
if(str[i]=='
')
/*注意这里一定要在单撇号内输入个空格*/
blank++;
else
if(str[i]>='A'&&str[i]<='Z')
big_string++;
else
if(str[i]>='a'&&str[i]<='z')
small_string++;
else
if(str[i]>='0'&&str[i]<='0')
number++;
else
rest++;
printf("The
result
is:\n");
printf("blank=%d\nbig_string=%d\nsmall_string=%d\nnumber=%d\nrest=%d\n",
blank,big_string,small_string,number,rest);
getch(); 参考技术A #include <stdio.h>
#include <ctype.h>
#define N 50
int main()
int chr=0,space=0,dig=0,other=0;
char string[N];
char *s;
printf("Please input the string: ");
gets(string);
s=string;
while(*s!='\0')
if(isalpha(*s))
chr++;
else if(isspace(*s))
space++;
else if(isdigit(*s))
dig++;
else
other++;
s++;
printf("Result:\n");
printf("English chars: %d\n",chr);
printf("Space: %d\n",space);
printf("Digit: %d\n",dig);
printf("Others: %d\n",other);
return 0;
用<ctype.h>会更加简单明了一些,注意要用gets输入字符串才可以包含空格,用scanf则不可以本回答被提问者采纳 参考技术B 你的代码出现问题的原因是scanf("%s",&a);
,a是一个char类型的变量,系统为它分配了一个字节的内存空间,但是你却输入了一个字符串到以a的地址为首地址的一段连续的内存空间里,这样就出现了越界错误.但是printf函数并不检查越界错误,它会按正常的方法执行,然后程序统计出长度,打印出来结果.但是返回到调用main函数的操作系统后,系统会发现越界错误,所以在结果显示出来后才出错.至于你说的输入5个以下不会出错,也许是偶然,也许跟你的编译器有关.我用VS2005测试,只要输入就会出错。
如果你是只想求出输入的字符串的长度而不要求保存输入的字符串,下面的代码更好。你的标准输入缓冲区有多大,那么它就可以求出多长的字符串的长度,不会有越界。
#include
int
main()
int
len=0;
//getchar()函数从标准输入设备(即键盘)接收一个字符,返回该字符的ASCII码.因为回车被输入时被转换成换行符(LF,ASCII码为10),所以getchar()返回10时就知道输入结束了.
while(getchar()!=10)
len++;
printf("It's
length
is
%d.\n",len);
return
0;
参考技术C 原来少了几个"=".现在再看看
#include "stdio.h"
#include<string.h>
void main()
int a=0,b=0,c=0,d=0,i,j=0;
char e[80];
gets(e);
for(i=0;i<80;i++)
if(e[i]!='\0')j++;
else break;
for(i=0;i<j;i++)
if(e[i]>='0'&&e[i]<='9')a++;
else if(e[i]>='A'&&e[i]<='Z'||e[i]>='a'&&e[i]<='z')b++;
else if(e[i]==' ')c++;
else d++;
printf("英文字母,空格,数字和其他字符的个数分别为:");
printf("%d,%d,%d,%d",b,c,a,d);
参考技术D #include <stdio.h>
void main()
/*分别表示英文字母,空格,数字,和其他字符*/
int y=0,k=0,n=0,other=0;
int i;/*i指示在字符串中的位置*/
char string[80];
printf("Enter a string:\n");
scanf("%s",string);
for(i=0;string[i]!='\0';i++)
if((string[i]>='a'&&string[i]<='z')||(string[i]>='A'&&string[i]<='Z'))y++;
else if(string[i]==' ')/* 注意单引号引的是空格*/k++;
else if(string[i]>='0'&&string<='9')n++;
else other++;
printf("y=%d,k=%d,n=%d,other=%d\n",y,k,n,other);
以上是关于c语言 计算字符串长度的主要内容,如果未能解决你的问题,请参考以下文章