您当前的位置:首页 > 互联网教程

如何在c语言中计算字符串长度

发布时间:2025-05-18 17:27:00    发布人:远客网络

如何在c语言中计算字符串长度

一、如何在c语言中计算字符串长度

int cont_str(char*s){ int i= 0; while( str[i++]!='\0'); return i;}

利用string头文件中的strlen()函数:

strlen(str);//假设str为待求的字符串数组名

sizeof(str)/sizeof(str[0]);//假设str为待求的字符串数组名

char a[10] std::cina; length=a.length()

1、strlen()函数求出的字符串长度为有效长度,既不包含字符串末尾结束符‘\0’。

2、sizeof()操作符求出的长度包含字符串末尾的结束符‘\0’。

3、length()函数求出的字符串长度不包含字符串末尾结束符’\0’。

4、当在函数内部使用sizeof()求解由函数的形参传入的字符数组的长度时,得到的结果。

5、为指针的长度,既对应变量的字节数,而不是字符串的长度,此处一定要小心。

6、C/C++的strlen(str)和str.length()和str.size()都可以求字符串长度。其中str.length()和str.size()是用于求string类对象的成员函数,strlen(str)是用于求字符数组的长度,其参数是char*。

7、这三种函数strlen、length、size函数计算的字符串长度都不算最后的操作符’\0’。

strlen函数用之前需要先对字符数组定义,例如char str[]={“hello world”};或者char str[]={‘h’,‘e’,‘l’,‘l’,‘o’,’‘,‘w’,‘o’,‘r’,‘l’,‘d’,’\0’}。

8、getchar()就是从键盘获取字符,直到回车为止。

第一种:strlen(char*)函数求的是字符串的实际长度,它求得方法是从开始到遇到第一个’\0’,如果你只定义没有给它赋初值,这个结果是不定的,它会从aa首地址一直找下去,直到遇到’\0’停止。

第二种:sizeof(),求所占总空间的字节数。

strlen函数用法见下链接:()函数、cin.getline()函数、getline()函数、gets()函数、getchar()函数用法见下链接:

二、C语言24点的算法

我的解法是把这个问题分解成了两个子问题,首先求出4个数字的无重复全排列,放到一个数组里面,再对没一个排列情况,从头到尾穷举所有的四则运算情况。注意到除法是特殊的,我用x/y表示x除以y,用x|y表示x分之y。注意到,如果穷举的解得到-24的话,只需要把有减法的地方调换一下顺序就可以了,代码如下

/***********************************************************************************/

int index[4]={0,1,2,3};//used to generate subscription collection

float f[4]={8.0f,3.0f,3.0f,8.0f};//the 24 point numbers

float fs[24][4];//all possible permutaions of f

int g_number=0;//number of permutations

void p(int idx){//求全排列的函数

for(int i=0;i<4;++i){tmp[i]=f[sub[i]];}

for(int g=0;g<g_number;++g){if(memcmp(fs[g],tmp,sizeof(float)*4)==0)return;}

for(int i=0;i<4;++i){fs[g_number][i]=f[sub[i]];}

for(int i=0;i<4;++i){//make subscription collections

for(int j=0;j<idx;++j){if(sub[j]==i)dupflag=true;}

void solve(int L){//对某个排列,递归求所有四则运算的结果,找到就退出

if(fabs(fabs(RES[L])-24.0f)<0.01f){

printf("Found solution,RES=%f,((%d%c%d)%c%d)%c%d\n",RES[L],

for(int j=0;j<5;++j){//j judges for operators

if(j==0){RES[L+1]=RES[L]+tmp[L+1];op[L]='+';solve(L+1);}

if(j==1){RES[L+1]=RES[L]-tmp[L+1];op[L]='-';solve(L+1);}

if(j==2){RES[L+1]=RES[L]*tmp[L+1];op[L]='*';solve(L+1);}

{RES[L+1]=RES[L]/tmp[L+1];op[L]='/';solve(L+1);}

{RES[L+1]=tmp[L+1]/RES[L];op[L]='|';solve(L+1);}

int main(int argc,char* argv[]){//should avoid 0

for(int i=0;i<g_number;++i){

memcpy(tmp,fs[i],sizeof(float)*4);

for(int t=0;t<4;++t){ printf("%d,",(int)tmp[t]);}

printf("Found no solution:(\n");

----------编译运行,运行时的参数就是4个数字

Found solution,RES=-24.000000,((1/5)-5)*5

Found solution,RES=-24.000006,((8/3)-3)|8

主程序为了简化,省去了对输入的检查,楼主可以自己添加。