字符串

知识点总结

Posted by GG on February 25, 2018

字符串

  1. 子串数目:子串: ==n(n+1)/2 + 1== 非空子串:==n(n+1)/2== 非空真子串:==n(n+1)/2 - 1==
  2. 字符串最后以 ’ \0 ’ 结束。==strlen(str)函数==求字符串的长度,遇到’\0’是结束计算,不算 ‘\0’,且从1开始计数。 ==strcat(p1,p2)函数==要保证p1要有足够的空间来容纳p1和p2连接后的串长。==strcpy(a,b)函数==拷b到a。
  3. 效率:==String(大姐,出生于JDK1.0时代) 不可变字符序列 <StringBuffer(二姐,出生于JDK1.0时代) 线程安全的可变字符序列 <StringBuilder(小妹,出生于JDK1.5时代) 非线程安全的可变字符序列==。Java中的String是一个类,而并非基本数据类型。string是值传入,不是引用传入。 StringBuffer和StringBuilder可以算是双胞胎了,这两者的方法没有很大区别。但在线程安全性方面,StringBuffer允许多线程进行字符操作。 这是因为在源代码中StringBuffer的很多方法都被关键字 synchronized 修饰了,而StringBuilder没有。 StringBuilder的效率比StringBuffer稍高,如果不考虑线程安全,StringBuilder应该是首选。另外,==JVM运行程序主要的时间耗费是在创建对象和回收对象上==。用String操作字符串时,实际上是在不断地==创建新对象==,而原来的对象会作为垃圾被回收。new 出来的对象在堆中。
  4. Huffman树就是==求最优解==,可以有多套方案,但最终每套方案生成的编码长度都相同且都是最优解。不同的方案影响的只是通向节点的路径为0还是1,而不会影响Huffman树的层次结构。==出现频率越高的节点越靠近根==,深度越小即编码值尾数越短;出现频率越低的节点越远离根,深度越大即编码位数越长。

  5. 字符数组初始化有两种方法:一种是==逐个字符赋值==char b[10]={‘H’,’E’,’L’,’L’,’O’,’!’,’\0’};,另一种是用==字符常量对整个数组赋值==char b[10]=”HELLO!”;。
  6. grep命令是一种强大的==文本==搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。 find只能匹配单个字符。
  7. KMP算法的改进在于:每当一趟匹配过程中出现字符比较不相等时,==不需回溯主串指针==,而是利用已经得到的“部分匹配”的结果将模式向右“滑动”尽可能远的一段距离后,继续进行比较。
  8. oracle中取得字符串中指定起始位置和长度的字符串 ==substr( string, start_position, [ length ] )== 计数从1开始,字符串长度不带“\0”.
  9. ==printf==(“格式控制字符串”, 输出列表); 如:printf(“%s”, string);
    ==putchar==(字符数据); 如:char a_c=‘h’;putchar(a_c);
    ==puts==(字符串); 如:puts(“hello girl”);