1. 程式人生 > >劍指offer(2):字符串

劍指offer(2):字符串

std rcp rst line 包含 turn strcat 和數 arch

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(2):字符串