strlen

KMP,Trie,AC自动机题目集

放肆的年华 提交于 2020-04-06 08:47:44
字符串算法并不多,KMP,trie,AC自动机就是其中几个最经典的。字符串的题目灵活多变也有许多套路,需要多做题才能体会。这里收集了许多前辈的题目做个集合,方便自己回忆。 KMP题目: https://blog.csdn.net/qq_38891827/article/details/80501506 Trie树题目: https://blog.csdn.net/qq_38891827/article/details/80532462 AC自动机:模板 https://www.luogu.org/blog/42196/qiang-shi-tu-xie-ac-zi-dong-ji AC自动机题目集: https://www.cnblogs.com/kuangbin/p/3164106.html KMP: LuoguP3375 KMP模板 #include<iostream> #include<cstdio> #include<cstring> using namespace std; const int N=1000000+10; char a[N],b[N]; int n,m,nxt[N],f[N],g[N]; void get_next() { nxt[1]=0; for (int i=2,j=0;i<=n;i++) { while (j>0 && a[j+1]!=a[i]) j

【CSAPP笔记】10. 代码优化

谁说我不能喝 提交于 2020-04-06 05:48:09
写程序的主要目标是使它在所有可能的情况下都能正确运行(bug free),一个运行得很快但有 bug 的程序是毫无用处的。在 bug free 的基础上,程序员必须写出清晰简洁的代码,这样做是为了今后检查代码或修改代码时,其他人能够读懂和理解代码。另一方面,让程序运行得更快也是一个很重要的考虑因素。不过,程序获得最大加速比的时候,是它第一次运行起来的时候。 在提到优化程序性能时(Code optimization),我们往往会想到算法与数据结构中的一个概念——复杂度。事实上,除了算法复杂度之外,仍然有许多的代码书写小细节可以改进性能表现。不过,编写高效的程序,第一个考虑的还是选择一组合适的算法与数据结构,因为算法复杂度影响还是相当大的,而且通常比其他常量因素更重要。第二点,我们必须写出编译器能够有效优化以转换成高效可执行代码的源代码。对于第二点,理解程序是如何被编译和执行、理解处理器和存储器系统是如何运作的、理解编译器优化的局限性是很重要的。在程序开发过程中,程序员必须在实现和维护程序的简单性与它的运行速度之间做出权衡,也就是在尽量不破坏程序的模块化和通用性的前提下,做到对代码性能的优化。 即使是最好的编译器也受到 妨碍优化的因素 (optimization blocker)的阻碍,程序员必须编写容易优化的代码,来 帮助 编译器(很让人眼界一新的观点)。研究程序的汇编代码

strlen 与 sizeof 的区别

坚强是说给别人听的谎言 提交于 2020-04-03 04:25:25
void ngx_time_init(void) { ngx_cached_err_log_time.len = sizeof("1970/09/28 12:00:00") - 1; ngx_cached_http_time.len = sizeof("Mon, 28 Sep 1970 06:00:00 GMT") - 1; ngx_cached_http_log_time.len = sizeof("28/Sep/1970:12:00:00 +0600") - 1; ngx_cached_http_log_iso8601.len = sizeof("1970-09-28T12:00:00+06:00") - 1; ngx_cached_syslog_time.len = sizeof("Sep 28 12:00:00") - 1; ngx_cached_time = &cached_time[0]; ngx_time_update(); } 阅读nginx中的ngx_time_init发现对于常量字符串的操作是使用sizeof操作然后进行-1操作,可见nginx对于性能的追求与细节的完美。 sizeof是操作符而不是函数,因此可以在编译过程中直接获取,而strlen为函数需要在运行中才能获取。 附:sizeof和strlen的区别: 一、sizeof   sizeof(...

Unicode字符集

我们两清 提交于 2020-04-01 04:18:59
Unicode字符集的出现是为了弥补ASCII码只能表示128个字符的限制。在实际应用中,如若我们想显示汉字或日文等等,显然使用ASCII是不可能的。Unicode占用了两个字节,即16位,能表示的字符高达65536。即使像汉字这样庞大的语言,也不过3W左右的字符,所以Unicode足够应付。当然实际中可能很少用到这种字符集,咱们可以将其作为一项拓展知识面来了解下。 在C语言中,我们有如下定义:char c='A';变量c只需要一个字节来保存,并用十六进制数0x41来初始化,0x41是A的ASCII码。 我们也可以定义:char *p = “hello!”;因为windows是一个32位的操作系统,所以指针变量p需要四个字节来保存。当然,后面的字符串需要7个字节来保存。 宽字符 Unicode或者宽字符都没有改变char数据型态在C中的含义。char继续表示1个字节的储存空间,sizeof (char)继续返回1。理论上,C中1个字节可比8位长,但对我们大多数人来说,1个字节(也就是1个char)是8位宽。 C中的宽字符基于wchar_t数据型态,它在几个表头文件包括 WCHAR.H 中都有定义,像这样: typedef unsigned short wchar_t ; 因此,wchar_t数据型态与无符号短整数型态相同,都是16位宽。 要定义包含一个宽字符的变量,可使用下面的语句

php字符串函数

时光总嘲笑我的痴心妄想 提交于 2020-03-27 15:22:03
字符串常用函数 获取字符串长度函数 /* * strlen函数 * int strlen($var) * 获取字符串或数字的长度 */ $a = 'hello, woRld'; $b = '王昭'; //utf8格式下,每个汉字3个字节长 $c = 1111; echo strlen($a),"\n", strlen($b), strlen($c), "\n"; 大小写转换函数 /* * string strtolower(string $str):字符串所有的字母转换为小写 * string strtoupper(string $str):字符串所有的字母转换为大写 * * string ucfirst(string $str):将字符串的首字母大写,其他字母不变 * string ucwords(string $str):将字符串中每个单词的首字母大写,其他字母不变 * */ $a = 'hello, world zhanGsan'; echo strtolower($a), "\n"; echo strtoupper($a), "\n"; echo ucfirst($a), "\n"; echo ucwords($a), "\n"; 字符串替换函数 //字符串替换函数 /* * str_replace($search, $replace, $str):实现字符串替换

strlen()和sizeof的区别

对着背影说爱祢 提交于 2020-03-17 01:55:25
某厂面试归来,发现自己落伍了!>>> 比如:char name[40] = "dadawa"; sizeof name = 40;而 strlen (name) = 6;sizeof计算的整个分配的内存单元大小,而strlen只计算实际的字符占的大小,切不包括‘\0’结束符。 int n;sizeof n;或者 sizeof (n);但是sizeof (int)是必须的; 此外size_t 是可以用来定义变量的一种新类型,他是用typedf定义的,用来定义专门存储 一种类型的最大字节大小 的; 来源: oschina 链接: https://my.oschina.net/u/2423028/blog/484182

sizeof 和strlen的区别

自作多情 提交于 2020-03-17 01:48:09
某厂面试归来,发现自己落伍了!>>> 1. 编译时计算运算符sizeof,可用类型或变量做参数,计算占用内存的大小。sizeof后若是类型必须加括弧,若是变量名可不加括弧。sizeof(x)可用来定义数组维数。如:printf("%d\n", sizeof(short));输出的结果为短整型的长度2。用结构类型或变量做参数时,sizeof 返回实际的大小,当用于静态数组时,sizeof 返回全部数组的尺寸。sizeof 操作符不能返回动态地被分派了的数组或外部的数组的尺寸 2. 运行时计算strlen,只能用char*做参数,且必须是以''\0''结尾的。计算的是字符串的长度。如:char str[20]="0123456789"; int a=strlen(str); 结果为a=10; 而int b=sizeof(str); 结果b=20; 3. 处理静态数组: char str[20]="0123456789"; int a=strlen(str); /*a=10; strlen 计算字符串的长度,以\0'为字符串结束标记。 int b=sizeof(str); /*b=20;sizeof 计算的则是分配的数组str[20] 所占的内存空间的大小,不受里面存储的内容影响。 4. 处理指针: char* ss = "0123456789"; sizeof(ss) 结果4

高精度加减乘除法

ぃ、小莉子 提交于 2020-03-16 04:11:15
百练2981 http://poj.grids.cn/practice/2981/ View Code 1 #include<stdio.h> 2 #include<string.h> 3 int num[301]; 4 int main() 5 { 6 int i,j,f = 0,f1; 7 char c1[201],c2[201]; 8 gets(c1); 9 gets(c2); 10 i = strlen(c1)-1; 11 j = strlen(c2)-1; 12 int g = 0; 13 while(i>=0&&j>=0) 14 { 15 g++; 16 if(c1[i]-'0'+c2[j]-'0'+num[g]>9) 17 { 18 num[g+1] += (c1[i]-'0'+c2[j]-'0'+num[g])/10; 19 num[g] = (c1[i]-'0'+c2[j]-'0'+num[g])%10; 20 f1 = 0; 21 } 22 else 23 num[g] += c1[i]-'0'+c2[j]-'0'; 24 i--;j--; 25 } 26 while(i>=0) 27 { 28 g++; 29 if(num[g]+c1[i]-'0'>9) 30 { 31 num[g+1] += (num[g]+c1[i]-'0')/10; 32 num[g]

C语言字符串

本秂侑毒 提交于 2020-03-15 18:00:54
目录 一、字符串的概念 二、占用内存的情况 三、字符串的初始化 四、字符串与指针 五、字符串的结尾标志 六、字符串的输出 七、字符串越界 八、字符串常用的库函数 1、获取字符串的长度(strlen) 2、字符串复制或赋值(strcpy) 3、字符串复制或赋值(strncpy) 4、字符串拼接(strcat) 5、字符串拼接(strncat) 6、字符串比较(strcmp、strncmp) 7、字符查找(strchr、strrchr) 8、字符串查找(strstr) 九、应用经验 1、留有余地 2、变量初始化 3、位置(地址)偏移的用法 4、不要在子函数中对字符指针用sizeof 十、课后作业 十一、版权声明 在很多教程中,字符串不过是一个以0结束的字符数组,但是,在我看来,字符串虽然不是C语言基本数据类型,但它比任何数据类型都重要,因为字符串是最常用的数据。 一、字符串的概念 我们可以把字符串储存在char类型的数组中,如果char类型的数组末尾包含一个表示字符串末尾的空字符\0,则该数组中的内容就构成了一个字符串。 因为字符串需要用\0结尾,所以在定义字符串的时候,字符数组的长度要预留多一个字节用来存放\0,\0就是数字0。这是约定。 char strname[21]; // 定义一个最多存放20个英文字符或十个中文的字符串 字符串也可以存放中文和全角的标点符号

sizeof和strlen小结

瘦欲@ 提交于 2020-03-14 04:16:58
sizeof和strlen小结 写在前面 之所以要总结一下sizeof和strlen的用法和区别,是因为这些知识可以帮助我们更加深入的理解各种数据结构在内存中的占用情况,也许表面上看好像没有多大用处,但有了这种理解,或许会对以后的编码有帮助。 sizeof sizeof是一种操作符,它的作用是返回一个对象或类型名的长度,返回值的类型为size_t,长度的单位是字节。sizeof表达式的结果是 编译时常量 。具体有以下三种用法: sizeof(类型名) sizeof(表达式) sizeof 表达式 使用sizeof操作符时,其结果部分地依赖所涉及的类型: 1、对char类型或值为char类型的表达式做sizeof操作保证得1; 2、对引用类型做sizeof操作将返回存放此引用类型对象所需的内存空间大小; 3、对指针做sizeof操作将返回存放指针所需的内存大小 4、对数组做sizeof操作等效于将其元素做sizeof操作的结果乘上数组元素的个数。 需要注意的是,sizeof不是一个函数,字节数的计算在程序编译时进行,而不是在程序执行的过程中才计算出来! 其返回值类型为size_t,在头文件stddef.h中定义。 sizeof的计算发生在编译时刻,所以它可以被当作常量表达式使用,如: char ary[sizeof(int)*10];//ok sizeof(