如何在c语言中计算字符串长度
发布时间:2025-05-18 17:27:00 发布人:远客网络
一、如何在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
主程序为了简化,省去了对输入的检查,楼主可以自己添加。