剑指offer:字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer:字符串相关的知识,希望对你有一定的参考价值。

C语言中的字符串

C语言中字符串的存储方式和数组类似,都是连续定长的内存块。字符串数组以\0结尾,所以会比正常数组多一位,char str3[5] = "1234"; //此处赋值字符串长度应小于5

常用字符串函数: <string.h>

字符串复制

  • char *strcpy(char *dest, const char *src),将字符串src复制给dest。
  • char *strncpy(char *dest, const char *src, int n),将字符串src的前n个字符复制给dest。
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. char dest[30] = "hello world";
  6. char src[] = "carlsplace";
  7. printf("original :%s\n", dest);
  8. printf("after strncpy() :%s\n", strncpy(dest, src, 3));
  9. printf("after strcpy() :%s\n", strcpy(dest, src));
  10. return 0;
  11. }
  12. /******输出******
  13. original :hello world
  14. after strncpy() :carlo world
  15. after strcpy() :carlsplace
  16. ****************/

字符串拼接

  • char *strcat(char *dest, const char *src),将字符串src拼接到dest后面
  • char *strncat(char *dest, const char *src, int n)将字符串src的前n个字符拼接到dest后面
  1. int main ()
  2. {
  3. char src[50], dest[50], dest2[50];
  4. strcpy(src, "This is source.");
  5. strcpy(dest, "This is destination1.");
  6. strcpy(dest2, "This is destination2.");
  7. strcat(dest, src);
  8. printf("after strcat(): |%s|\n", dest);
  9. strncat(dest2, src, 9);
  10. printf("after strncat(): |%s|\n", dest2);
  11. return(0);
  12. }
  13. /******输出******
  14. after strcat(): |This is destination1.This is source.|
  15. after strncat(): |This is destination2.This is s|
  16. ****************/

字符串比较

  • int strcmp(const char *s1, const char *s2);,比较字符串s1和s2,返回s1-s2,相等返回0。strcmp() 以二进制的方式进行比较,不会考虑多字节或宽字节字符
  • int strncmp(const char *s1, const char *s2, int n);,比较字符串s1的和s2的前n个字符
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main()
  4. {
  5. char a[] = "aBcDeF";
  6. char b[] = "aaCdEf";
  7. char c[] = "aacdef";
  8. char d[] = "aBcDeF";
  9. printf("strcmp(a, b) : %d\n", strcmp(a, b));
  10. printf("strcmp(b, a) : %d\n", strcmp(b, a));
  11. printf("strcmp(a, d) : %d\n", strcmp(a, d));
  12. printf("strncmp(b, c, 2) : %d\n", strncmp(b, c, 2));
  13. printf("strncmp(b, c, 3) : %d\n", strncmp(b, c, 3));
  14. return 0;
  15. }
  16. /******输出******
  17. strcmp(a, b) : -31
  18. strcmp(b, a) : 31
  19. strcmp(a, d) : 0
  20. strncmp(b, c, 2) : 0
  21. strncmp(b, c, 3) : -32
  22. ****************/

字符串查找

  • char * strchr (const char *str, int c),其中参数c须传入字符,会自动被转化为ASCII码。函数返回字符c第一次出现位置的指针
  • char *strrchr(const char *str, int c),函数返回字符c最后一次出现位置的指针
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(){
  4. char s[] = "012345A7890123456789012345A7890";
  5. char *p1 = NULL;
  6. char *p2 = NULL;
  7. p1 = strchr(s, ‘A‘);
  8. p2 = strrchr(s, ‘A‘);
  9. printf("%s\n", s);
  10. printf("%s\n", p1);
  11. printf("%s\n", p2);
  12. return 0;
  13. }
  14. /******输出******
  15. 012345A7890123456789012345A7890
  16. A7890123456789012345A7890
  17. A7890
  18. ****************/

字符串长度

  • unsigned int strlen (char *s),返回字符串长度,不包含\0,注意其与sizeof()的区别
  1. #include<stdio.h>
  2. #include<string.h>
  3. int main()
  4. {
  5. char str1[] = "The Arch-based Manjaro is a great Linux distribution.";
  6. char str2[100] = "The Arch-based Manjaro is a great Linux distribution.";
  7. printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
  8. printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
  9. return 0;
  10. }
  11. /******输出******
  12. strlen(str1)=53, sizeof(str1)=54
  13. strlen(str2)=53, sizeof(str2)=100
  14. ****************/

Python中的字符串

Python中的字符串可以看做list,Python中提供了方便的字符串操作方式。

字符串运算符

  • 使用+可直接进行字符串拼接
  • 使用*可重复输出字符串
  • 使用[i][:]可对字符串索引和切片
  • innot in可用来判断字符(串)之间的包含关系

常用字符串内建函数string.xxx

  • string.find(str, beg=0, end=len(string))
    检测 str 是否包含在 string 中,如果 beg 和 end 指定范围,则检查是否包含在指定范围内,如果是返回开始的索引值,否则返回-1
  • string.index(str, beg=0, end=len(string))
    跟find()方法一样,只不过如果str不在 string中会报一个异常.
  • string.format()
    格式化字符串
  1. >>> "{:.2f}".format(3.1415926)
  2. `3.14`
  • string.isalnum()
    如果 string 至少有一个字符并且所有字符都是字母或数字则返回 True,否则返回 False
  • string.isalpha()
    如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
  • string.isdecimal()
    如果 string 只包含十进制数字则返回 True 否则返回 False.
  • string.isdigit()
    如果 string 只包含数字则返回 True 否则返回 False.
  • string.islower()
    如果 string 中包含至少一个区分大小写的字符,并且所有这些(区分大小写的)字符都是小写,则返回 True,否则返回 False
  • string.rstrip()
    删除 string 字符串末尾的空格.
  • string.split()
    默然以空格为界分割字符,括号内可填入自定分割字符,分隔符可以为普通字符,也可以为\n等转义字符。
  1. >>> ‘carl_will_go‘.split(‘_will_‘)
  2. [‘carl‘, ‘go‘]
  • ‘string.join(seq)‘
    以string为间隔拼接序列
  1. >>> ‘_‘.join([‘a‘, ‘b‘, ‘c‘])
  2. ‘a_b_c‘
  • `string.find(str)‘
    查找str在string 中位置,有则返回下标,没有返回-1
  1. >>> abc‘.find(‘b‘)
  2. 1

以上是关于剑指offer:字符串的主要内容,如果未能解决你的问题,请参考以下文章

剑指offer--38字符串的排列

剑指offer--38字符串的排列

《剑指Offer——58:左旋转字符串》代码

代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串

剑指offer--20表示数值的字符串

剑指offer—左旋转字符串