一,一些定义
- 截取要点
1,prefix(i),0 ~ i,平凡前缀为其本身,其余为非平凡前缀
2,suffix(i), i ~ n,平凡后缀为其本身,其余为非平凡后缀
3,回文: 1 < i < ∣ s ∣ s [ i ] = s [ ∣ s ∣ + 1 − i ] 1<i<|s|~~s[i] = s[|s|+1-i] 1<i<∣s∣ s[i]=s[∣s∣+1−i],向量思维!
二,标准库函数
字符数组char
- 这是一个C风格的处理利器
- 字符数组输入时以
"\0"
,做结,这是一个字符 - 要的就是指针
char s[520];
头指针 s
特定位置指针 s+n(下标编号)
strstr(char *str1, const char *str2):
若 str2 是 str1 的子串,则返回 str2 在 str1 的首次出现的地址;如果 str2 不是 str1 的子串,则返回 NULL
strchr(const char *str, int c):
找到在字符串 str 中第一次出现字符 c 的位置,并返回这个位置的地址。如果未找到该字符则返回 NULL。
strrchr(const char *str, char c):
找到在字符串 str 中最后一次出现字符 c 的位置,并返回这个位置的地址。如果未找到该字符则返回 NULL。
strcmp(const char *str1, const char *str2):
按照字典序比较 str1 str2 若 str1 字典序小返回负值,两者一样返回 0,str1 字典序更大则返回正值。
在不同平台下的返回值都遵循正负,但并非都是 0、1、-1。
strcpy/strncpy(char *str, const char *src, int cnt):
复制至多 cnt 个字符到 str 中,若 src 终止而数量未达 cnt 则写入空字符到 str 直至写入总共 cnt 个字符。
类 string
- 复杂度接近char,功能更多
- 无法对未初始化的strinig使用指针操作
- 输出函数cout慢
倘若s添加了有效前缀,8进制为"0",16进制为"0x",那么自动转为对应进制
单独函数:
int a = stoi(s); stoi(s,0,8); string 转 int,第二种手法可以自由转换进制(第二参只能是0)
long int a = stol(s); sotol(s,0,8);
unsigned long int a= stoul(s); stoul(s,0,8);
long long a = stoll(s); stoll (s,0,8);
using long long a = stoull(s);
double a = stod(s);
string s= to_string (a); a一般是double或者int,如果是double,默然小数点后六位,补0
char c
isalpha (c) 返回int,判断字母
isalnum (c) 返回int,判断是否是数字或数字
isdigit (c) 判断数字
isupper (c) 判断大写
islower (c) 判断小写
tolower (c) 传参int,返回int,要转化
toupper (c) 传参int,返回int,要转化
成员函数:
substr (size_t pos = 0, size_t len = npos) 默认从开始截,控制参数是长度
copy (char *s[], size_t len, size_t pos =0 ) 默认从开始截,控制参数是长度,直接复制进字符数组
printf("字符 a 在 s 的 %d 位置第一次出现", s.find('a'));
printf("字符串 t 在 s 的 %d 位置第一次出现", s.find(t));
printf("在 s 中自 pos 位置起字符串 t 第一次出现在 %d 位置", s.find(t, pos));
replace(pos, n, s) 删除从 pos 开始的 n 个字符,然后在 pos 处插入串 s。
erase(pos, n) 删除从 pos 开始的 n 个字符。
insert(pos, s) 在 pos 位置插入字符串 s。
字符串输入输出的函数
1,scanf和printf的使用
此类型只能用于字符数组的输入输出,格式为:
char a[1000];
scanf("%s",a);
printf("s",a);
特点:printf遇到空格字符不会停止,scanf则会停
2,puts和gets
此类型只能用于字符数组的输入输出,格式为:
int puts (const char *s); s 可以是字符指针变量名、字符数组名,或者直接是一个字符串常量。功能是输出。
char *gets (char *str); gets() 读取一个字符串存储到字符指针变量 str 所指向的内存空间。
特点:输出时只有遇到 '\0'
也就是字符串结束标志符才会停止,空格也不会停
3,string
string s1;
getline(cin,s1); cin>>s1;
cout<<s1<<endl; printf("%c",s1.c_str());
特点:
getline
遇到空格字符不会停止读入cin
会立刻停止且读不到换行