劍指offer(2):字符串
阿新 • • 發佈:2017-05-14
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。
#include <stdio.h>
#include
<string.h>int main()
{
char dest[30] = "hello world";
char src[] = "carlsplace";
printf("original :%s\n", dest);
printf("after strncpy() :%s\n", strncpy(dest, src, 3));
printf("after strcpy() :%s\n", strcpy(dest, src));
return 0;
}
/******輸出******
original :hello world
after strncpy() :carlo world
after strcpy() :carlsplace
****************/
字符串拼接
char *strcat(char *dest, const char *src)
,將字符串src拼接到dest後面char *strncat(char *dest, const char *src, int n)
將字符串src的前n個字符拼接到dest後面
int main ()
{
char src[50], dest[50], dest2[50];
strcpy(src, "This is source.");
strcpy(dest, "This is destination1."
);strcpy(dest2, "This is destination2.");
strcat(dest, src);
printf("after strcat(): |%s|\n", dest);
strncat(dest2, src, 9);
printf("after strncat(): |%s|\n", dest2);
return(0);
}
/******輸出******
after strcat(): |This is destination1.This is source.|
after strncat(): |This is destination2.This is s|
****************/
字符串比較
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個字符
#include <stdio.h>
#include <string.h>
int main()
{
char a[] = "aBcDeF";
char b[] = "aaCdEf";
char c[] = "aacdef";
char d[] = "aBcDeF";
printf("strcmp(a, b) : %d\n", strcmp(a, b));
printf("strcmp(b, a) : %d\n", strcmp(b, a));
printf("strcmp(a, d) : %d\n", strcmp(a, d));
printf("strncmp(b, c, 2) : %d\n", strncmp(b, c, 2));
printf("strncmp(b, c, 3) : %d\n", strncmp(b, c, 3));
return 0;
}
/******輸出******
strcmp(a, b) : -31
strcmp(b, a) : 31
strcmp(a, d) : 0
strncmp(b, c, 2) : 0
strncmp(b, c, 3) : -32
****************/
字符串查找
char * strchr (const char *str, int c)
,其中參數c
須傳入字符,會自動被轉化為ASCII碼。函數返回字符c
第一次出現位置的指針char *strrchr(const char *str, int c)
,函數返回字符c
最後一次出現位置的指針
#include <stdio.h>
#include <string.h>
int main(){
char s[] = "012345A7890123456789012345A7890";
char *p1 = NULL;
char *p2 = NULL;
p1 = strchr(s, ‘A‘);
p2 = strrchr(s, ‘A‘);
printf("%s\n", s);
printf("%s\n", p1);
printf("%s\n", p2);
return 0;
}
/******輸出******
012345A7890123456789012345A7890
A7890123456789012345A7890
A7890
****************/
字符串長度
unsigned int strlen (char *s)
,返回字符串長度,不包含\0
,註意其與sizeof()
的區別
#include<stdio.h>
#include<string.h>
int main()
{
char str1[] = "The Arch-based Manjaro is a great Linux distribution.";
char str2[100] = "The Arch-based Manjaro is a great Linux distribution.";
printf("strlen(str1)=%d, sizeof(str1)=%d\n", strlen(str1), sizeof(str1));
printf("strlen(str2)=%d, sizeof(str2)=%d\n", strlen(str2), sizeof(str2));
return 0;
}
/******輸出******
strlen(str1)=53, sizeof(str1)=54
strlen(str2)=53, sizeof(str2)=100
****************/
Python中的字符串
Python中的字符串可以看做list,Python中提供了方便的字符串操作方式。
字符串運算符
- 使用
+
可直接進行字符串拼接 - 使用
*
可重復輸出字符串 - 使用
[i]
和[:]
可對字符串索引和切片 in
和not in
可用來判斷字符(串)之間的包含關系
常用字符串內建函數string.xxx
string.find(str, beg=0, end=len(string))
檢測 str 是否包含在 string 中,如果 beg 和 end 指定範圍,則檢查是否包含在指定範圍內,如果是返回開始的索引值,否則返回-1string.index(str, beg=0, end=len(string))
跟find()方法一樣,只不過如果str不在 string中會報一個異常.string.format()
格式化字符串
>>> "{:.2f}".format(3.1415926)
`3.14`
string.isalnum()
如果 string 至少有一個字符並且所有字符都是字母或數字則返回 True,否則返回 Falsestring.isalpha()
如果 string 至少有一個字符並且所有字符都是字母則返回 True,否則返回 Falsestring.isdecimal()
如果 string 只包含十進制數字則返回 True 否則返回 False.string.isdigit()
如果 string 只包含數字則返回 True 否則返回 False.string.islower()
如果 string 中包含至少一個區分大小寫的字符,並且所有這些(區分大小寫的)字符都是小寫,則返回 True,否則返回 Falsestring.rstrip()
刪除 string 字符串末尾的空格.string.split()
默然以空格為界分割字符,括號內可填入自定分割字符,分隔符可以為普通字符,也可以為\n
等轉義字符。
>>> ‘carl_will_go‘.split(‘_will_‘)
[‘carl‘, ‘go‘]
- ‘string.join(seq)‘
以string為間隔拼接序列
>>> ‘_‘.join([‘a‘, ‘b‘, ‘c‘])
‘a_b_c‘
- `string.find(str)‘
查找str在string 中位置,有則返回下標,沒有返回-1
>>> ‘abc‘.find(‘b‘)
1
劍指offer(2):字符串