字符串操作函数

· · 个人记录

获取整行数据的方法:

1.gets(s);该方法已经被淘汰,因为它不安全,很多场合禁止使用。

2.fgets(s, 30, stdin);有个缺点,如果输入字符串后带有回车,则会把换行符也存入。

3.cin.getline(s, 30);该方法不会包含最后的换行符,是目前最好用的方法。使用中要注意,如果之前上一行已经有输入,且不是用 cin.getline() 输入的内容,那么第一次调用 cin.getline(),会读入上一行末的空换行,需要再执行一次 cin.getline() 即可。

4.scanf("%[^\n]", s); 输入一个字符串,直到遇到 \n 时结束。其中 [^\n] 是一个正则表达式,即一个给定输入规则的表达式,这里的规则即为:遇到 ^ 后面的字符就停止输入。

5.如果在 C++ 中使用 string s;,那么我们也可以使用 getline(cin, s); 来输入一行字符串。

常见的字符及字符串的输入输出函数:

include<cstdio>或#include<stdio.h>

1.getchar(): 从键盘获取一个字符并返回。

2.putchar(c): 输出一个字符c。

3.gets(s): 从键盘获取一行字符串,输入到地址 s 开始的一段空间。

4.puts(s): 从地址 s 开始的地方输出一个字符串并换行。

5.sscanf(s, "%d...", &a, ...): 将 s 作为格式化输入的内容。

6.sprintf(s, "%d...", a, ...): 将输出内容存入字符串 s 中。

include <cstring>

1.strlen(s):求 s 的长度。

2.strcpy(s, "hello"):将 "hello" 拷贝到 s 中。

3.strcat(s, "hello"):将 "hello" 添加到 s 的末尾。

4.strcmp(s, "hello"):比较 s 和 "hello" 的字典序,如果 s 的字典序在 "hello" 前,返回值小于 0;如果在 "hello" 后,返回值大于 0;如果 s 就是 "hello",返回值等于 0。

5.strncmp(s, "hello", n): 比较 s 和 "hello" 的前 n 个字符。

6.strcasecmp(s, "hello"):是 strcmp 的忽略大小写的版本。

7.strchr(s, ' '):找到 s 位置开始后第一次出现空格的地址。

8.strncpy(s1, s, len):将 s 开始的连续 len 个字符复制到 s1。

9.strtok(s, ","):将字符串s开头第一个","前的部分拷贝出来,并返回该子串拷贝的首地址。

10.strstr(s1, s2): 若 s2 包含于 s1 中,则返回其在 s1 中的首地址,否则返回 NULL。

11.strlwr(s):将字符串中的大写字母转换成小写字母。

12.strupr(s):将字符串中的小写字母转换成大写字母。

include <string>

1.s.size():求 s 的长度;也可以写作 s.length()。

2.s.find(t):在字符串 s 中查找子串 t,如果子串 t 出现,则返回 t 第一次出现的位置(从 0 开始),否则返回 -1;(需要注意的是:返回的变量是 unsigned 类型,需要转成 int 才能得到 -1)。

3.s.erase(x, y):删除 s 的第 x 位及之后的 y 个字符。

4.s.substr(x, len):生成字符串 s 中从下标 x 开始的长为 len 的子串。

5.s.replace(x, len, t):将 s 的第 x 位及之后的 len 位替换为字符串 t,下标从 0 开始;注意:x ~ x+len-1 一定要是合法的下标!

6.s.insert(x, t):在 s 的第 x 位上插入字符串 t,下标从 0 开始;注意 x 一定要在合法范围内!

7.s.append(t):在字符串 s 后面加上一个字符串 t。

8.s.begin():返回 s 的首地址,即 &s[0] 或 s。

9.s.end():返回 s 最后结束符的地址。

include <cctype>

1.isdigit(c): 判断字符 c 是否是数字。

2.isalpha(c): 判断字符 c 是否是英文字母。

3.isalnum(c): 判断字符 c 是否是英文字母或数字。

4.islower(c): 判断字符 c 是否是小写字母。

5.isupper(c): 判断字符 c 是否是大写字母。

6.tolower(c): 返回字符 c 对应的小写字母;若 c 不是字母,返回 c 本身。

7.toupper(c): 返回字符 c 对应的大写字母;若 c 不是字母,返回 c 本身。

*通过+-/<>来对字符串进行操作**

1.s = "hello":将 "hello" 拷贝到 s 中。

2.s += "hello":将 "hello" 添加到 s 的末尾。

3.s < "hello":比较 s 和 "hello" 的字典序,s 的字典序是否在 "hello" 前。

4.s > "hello":比较 s 和 "hello" 的字典序,s 的字典序是否在 "hello" 后。

5.s == "hello": 比较 s 和 "hello" 的字典序,s 是否与 "hello" 相等。

printf 的字符串输出格式

1.%s:例如:printf("%s", "CHINA") 输出 "CHINA" 字符串(不包括双引号)。

2.%ms:输出的字符串占 m 列,如字符串本身长度大于 m,则突破 m 的限制,将字符串全部输出;若串长小于 m,则左补空格。

3.%-ms:如果串长小于 m,则在 m 列范围内,字符串向左靠,右补空格。

4.%m.ns:输出占 m 列,但只取字符串中左端 n 个字符。这 n 个字符输出在 m 列的右侧,左补空格。

5.%-m.ns:其中 m、n 含义同上,n 个字符输出在 m 列范围的左侧,右补空格。如果 n>m,则自动取 n 值,即保证 n 个字符正常输出。

接受不含空白符的字符串

1.scanf("%s", s);//使用 %s 输入整个字符串,后面 s 即为数组的首地址,不需要加取地址符 &。

2.cin >> s;