Strings

C风格字符串

C风格字符串是以空字符null结束的字符数组。
char ca1[] = {'c', '+', '+', '\0'};等价于char ca1[] = "C++";

C风格字符串的使用

1
2
3
4
const char* cp = "some value";
while (cp) {
++cp;
}

C风格字符串的标准库函数

包含头文件<cstring>

函数 功能
strlen(s) 返回s的长度,不包括字符串结束符null
strcmp(s1, s2) 比较两个字符串s1和s2是否相同。若s1与s2相等,返回0;若s1大于s2,返回正数;若s1小于s2,则返回负数。
strcat(s1, s2) 将字符串s2连接到s1后,并返回s1
strcpy(s1, s2) 将s2复制给s1,并返回s1
strncat(s1, s2, n) 将s2的前n个字符连接到s1后面,并返回s1。安全一些
strncpy(s1, s2, n) 将s2的前n个字符复制给s1,并返回s1。安全一些
1
2
char str[11];
strcpy(str, "0123456789", 11);

其他

为了节省内存,C/C++把常量字符串放到单独的一个内存区域。当几个指针赋值给相同的常量字符串时,它们实际上会指向相同的内存地址。但用常量内存初始化数组,情况却不同。
例:输出str1 != str2,str3 == str4。

1
2
3
4
5
6
7
8
9
10
11
int main()
{

char str1[] = "haha";
char str2[] = "haha";
char* str3 = "haha";
char* str4 = "haha";
if (str1 == str2) {cout << "str1 == str2" << endl;}
else {cout << "str1 != str2" << endl;}
if (str3 == str4) {cout << "str3 == str4" << endl;}
else {cout << "str3 != str4" << endl;}
}

STL String

参看STL String

leetcode相关题目

字符串这里常出细节题目,字符转换、字符串匹配与查找与是否满足某特性(如回文串、正则、路径、前缀等),重点就是要细心、有耐心以及熟悉字符串操作。
字符串如果要转int,时刻警惕溢出问题。
Valid Palindrome
[Implement strStr()][l1]
[String to Integer (atoi)][l2]
Add Binary
Longest Palindromic Substring
Regular Expression Matching
Wildcard Matching
Longest Common Prefix
Valid Number
Integer to Roman
Roman to Integer
Count and Say
Anagrams
Simplify Path
Length of Last Word
Reverse Words in a String
Two Pointers | Minimum Window Substring
Two Pointers | Substring with Concatenation of All Words
Two Pointers | [Reverse String](https://github.com/Conglang/MyLeetCode/blob/master/src/Reverse String.cpp)
Two Pointers | Reverse Vowels of a String

[1] 剑指Offer
[2] leetcode
[3] C++ Primer 4th edition
[l1]: https://github.com/Conglang/MyLeetCode/blob/master/src/Implement_strStr[].cpp
[l2]: https://github.com/Conglang/MyLeetCode/blob/master/src/String_to_Interger[atoi].cpp