strlen

从discuz里面拿来的东东[转phpx]

懵懂的女人 提交于 2020-01-31 00:20:54
<?php 加解密函数 $encode = authocode ( '我要加密' , 'ENCODE' ); $decode = authocode ( '我要解密' , 'DECODE' ); $auth_key = 34577 ; //密钥 function authcode ( $string , $operation , $key = '' ) { $key = md5 ( $key ? $key : $GLOBALS [ 'auth_key' ]); $key_length = strlen ( $key ); $string = $operation == 'DECODE' ? base64_decode ( $string ) : substr ( md5 ( $string . $key ), 0 , 8 ). $string ; $string_length = strlen ( $string ); $rndkey = $box = array(); $result = '' ; for( $i = 0 ; $i <= 255 ; $i ++) { $rndkey [ $i ] = ord ( $key [ $i % $key_length ]); $box [ $i ] = $i ; } for( $j = $i = 0 ; $i < 256 ; $i ++)

通过create_string_buffer、create_unicode_buffer让C语言具备修改字符串的能力

自作多情 提交于 2020-01-28 21:50:02
字符串的修改 我们知道C中不存在字符串这个概念,python中的字符串在C中也是通过字符数组来实现的。我们说在C中创建一个字符数组有两种方式: char *s1 = "hello world"; char s2[] = "hello world"; 这两种方式虽然打印的结果是一样的,并且s1、s2都指向了对应字符数组的首地址,但是内部的结构确是不同的。 1.char *s1 = "hello world";此时这个字符数组是存放在静态存储区里面的,程序编译的时候这块区域就已经确定好了,静态存储区在程序的整个运行期间都是存在的,主要用来存放一些静态变量、全局变量、常量。因此s1只能够访问这个字符数组,却不能够改变它,因为它是一个常量。而char s2[] = "hello world";,这种方式创建的字符数组是存放在栈当中的,可以通过s2这个指针去修改它。 2.char *s1 = "hello world";是在编译的时候就已经确定了,因为是一个常量。而char s2[] = "hello world";则是在运行时才确定。 3.char *s1 = "hello world";创建的字符数组存于静态存储区,char s2[] = "hello world";创建的字符数组存储于栈区,所以s1访问的速度没有s2快。 所以我们说 char *s

KMP模板

走远了吗. 提交于 2020-01-26 23:53:21
参考: https://blog.csdn.net/qq_30241305/article/details/50700199 A.更正后模板代码,求子串最初出现位置 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 using namespace std; 5 int nexta[10005],a[1000005],s[10005]; 6 int n,m; 7 void getnexta(int s[])//初始next数组 8 { 9 memset(nexta,0,sizeof(nexta)); 10 int k = -1,j = 0; 11 nexta[0] = -1; 12 13 while(j <m)//这里的m为全局变量,为模式串长度 14 { 15 16 if(k == -1 || s[k] == s[j]) 17 { 18 nexta[j + 1] = k + 1; 19 j ++; 20 k ++; 21 } 22 else 23 { 24 k = nexta[k]; 25 } 26 } 27 28 } 29 int kmp(int s[],int t[])//t模式串,s母串 30 { 31 getnexta(t); 32 33 int i = 0,j = 0; 34 while(i

如何求C语言字符串长度(strlen函数和sizeof关键字)

放肆的年华 提交于 2020-01-26 04:20:23
C语言字符串长度的计算是编程时常用到的,也是求职时必考的一项。 C语言本身不限制字符串的长度,因而程序必须扫描完整个字符串后才能确定字符串的长度。 在程序里,一般会用strlen()函数或sizeof来获取一个字符串的长度,但这2种方法获取的字符串的长度其实是不一样,我们用如下函数进行测试: void test6() { char s1[20] = “hello world”; char s2[20] = {‘h’,‘e’,‘l’,‘l’,‘0’,’ ‘,‘w’,‘o’,‘r’,‘l’,‘d’,’\0’}; char s3[] = “hello\0 world”; char s4[] = {‘h’,‘e’,‘l’,‘l’,‘0’,’\0’,’ ‘,‘w’,‘o’,‘r’,‘l’,‘d’,’\0’}; printf("%d\t%d\t%d\t%d\n",strlen(s1),strlen(s2),strlen(s3),strlen(s4)); printf("%d\t%d\t%d\t%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4)); } 注意,该函数里面定义了4个字符串,基本数据都是“hello world",但需要注意的是,字符串s1和s2给定了字符串数组的大小为20,然后使用2种方式进行赋值

C陷阱与缺陷--读书笔记3 语义“陷阱”

北城余情 提交于 2020-01-23 01:51:14
第三章 一、知识点 1、C语言中的数组值得注意的地方有以下两点:(P41) (1)、C语言中只有一维数组,而且数组的大小必须在编译期就作为一个常数确定下来。然而,C语言中数组的元素可以是任何类型的对象,当然也可以是另外打的一个数组。 (2)、对于一个数组,我们只能够做两件事:确定该数组的大小,以及获得指向该数组下标为0的元素的指针。其他有关数组的操作,哪怕它们乍看上去十一数组下标进行运算的,实际上都是通过指针进行的。换句话说,任何一个数组下标运算都等同于一个对应的指针运算,因此我们完全可以依据指针行为定义数组下标的行为。 2、对于int calendar[12][31]; 这个语句生命了calendar是一个数组,该数组拥有12个数组类型的元素,其中每个元素都是一个拥有31个整型元素的数组。(P42) 3、如果两个指针指向的是同一个数组中的元素,我们可以把这两个指针相减。(P43) 4、*(a+i)即数组中下标为i的元素的引用。由于a+i与i+a的含义一样,因此a[i]与i[a]也具有同样的含义。(P44) 5、来看几个声明:(P45) int calendar[12][31]; int *p; int i; calendar[4]是calendar数组的第5个元素,是calendar数组中12个有着31个整型元素的数组之一。可以有 p = calendar[4];

sizeof和strlen的区别

↘锁芯ラ 提交于 2020-01-22 14:40:13
sizeof是分配的数组实际所占的内存空间大小,不受里面存储内容 1、sizeof()是运算符,由于在编译时计算,因此sizeof不能用来返回动态分配的内存空间的大小,sizeof来返回类型以及静态分配的对象、结构或数组的空间,返回值跟这些里面所存储的内容没有关系。 具体而言,当参数分别如下时,sizeof返回的值含义如下: 数组-编译时分配的数组空间大小 指针-存储该指针所用的空间大小 类型-该类型所占的空间的大小 对象-对象的实际占用空间大小 2、strlen计算字符串的长度,以'\0'为字符串结束标志 来源: 51CTO 作者: 蜗牛奔跑啦 链接: https://blog.51cto.com/wenxuehui/2468258

1014 福尔摩斯的约会 (20分)

ぐ巨炮叔叔 提交于 2020-01-22 09:25:21
#include <iostream> #include <string.h> #include <cmath> using namespace std; int main() { char a[61],b[61],c[61],d[61]; int w=0,w1=0,h=0,m; cin>>a>>b>>c>>d; char day[8][4]={"MON","TUE","WED","THU","FRI","SAT","SUN"}; int l=strlen(a); if(strlen(b)<l) l=strlen(b); for(int i=0;i<l;i++) { if(a[i]==b[i]) { if(a[i]>=65&&a[i]<=71&&w1==0) { w1=1; w=a[i]-65; } else if(a[i]>=65&&a[i]<=78&&w1==1) { h=a[i]-55; break; } else if(w1==1&&a[i]>=48&a[i]<=57) { h=a[i]-48; break; } } } l=strlen(c); if(strlen(d)<l) l=strlen(d); for(int i=0;i<l;i++) { if(c[i]==d[i]&&((c[i]>=65&&c[i]<=90)||(c[i]>=97&&c[i]<=122))) {

sizeof 与strlen区别

假如想象 提交于 2020-01-22 08:39:48
区别: 1.sizeof是操作符,strlen是函数 2.sizeof可以用类型做参数,strlen只能使用char*做参数,且必须是以’\0’结尾的 3.数组做sizeof的参数不退化,传递给strlen退化为指针 4.大部分编译程序在编译的时候sizeof就被计算了,也就是sizeof(x)可以用来定义数组维度的原因.strlen的结果要在运行的时候才能计算出来,它用来计算字符串的长度,sizeof用来计算类型占内存的大小 来源: CSDN 作者: vvc223c 链接: https://blog.csdn.net/qq_44800780/article/details/103792186

指针和数组计算大小(sizeof()和strlen()的对比)

醉酒当歌 提交于 2020-01-20 01:34:14
/**--------------------------------------------------------------- * @brief 指针和数组变量sizeof()和strlen()的比较 * *---------------------------------------------------------------*/ int point_array_init ( ) { int * PointOne = "123456" ; char * PointTwo = "123456" ; char * PointThree = "123456\0" ; int ArrayOne [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayTwo [ 6 ] = { 1 , 2 , 3 , 4 , 5 , 6 } ; char ArrayThree [ 7 ] = { 1 , 2 , 3 , 4 , 5 , 6 , '\0' } ; printf ( "\n\t|-------------------------------------------------------------------------\n" ) ; printf ( "\t| int *Point: | " ) ; printf ( "sizeof(Point

蓝桥杯2015-省赛-C/C++-A组4题

天涯浪子 提交于 2020-01-19 18:35:11
题目 格子中输出 StringInGrid函数会在一个指定大小的格子中打印指定的字符串。 要求字符串在水平、垂直两个方向上都居中。 如果字符串太长,就截断。 如果不能恰好居中,可以稍稍偏左或者偏上一点。 下面的程序实现这个逻辑,请填写划线部分缺少的代码。 #include <stdio.h> #include <string.h> void StringInGrid(int width, int height, const char* s) { int i,k; char buf[1000]; strcpy(buf, s); if(strlen(s)>width-2) buf[width-2]=0; printf("+"); for(i=0;i<width-2;i++) printf("-"); printf("+\n"); for(k=1; k<(height-1)/2;k++){ printf("|"); for(i=0;i<width-2;i++) printf(" "); printf("|\n"); } printf("|"); printf("%*s%s%*s",_____________________________________________); //填空 printf("|\n"); for(k=(height-1)/2+1; k<height-1; k++