字符串处理
一、字符串的处理
1、c
字符串是编程语言中非常常用的一种数据类型,字符串的处理也是各类算法竞赛中考察较多的一类题型。字符串,简单地说,就是由若干个字符连接在一起的串。
C语言中规定:末尾以\0
结束的字符数组称为字符串,否则只能算作字符数组。只有以\0
结束的字符数组才能以%s
的方式用 printf 输出。
字符数组
索引 | 0 | 1 | 2 | 3 |
---|---|---|---|---|
字符 | a | b | c | d |
字符串
索引 | 0 | 1 | 2 | 3 | 4 |
---|---|---|---|---|---|
字符 | a | b | c | d | \0 |
2、c++
使用提供的string
类型。
char数组会比string更灵活
3、Java
使用提供的String
类表示。
Java中的String
是不能更改某一个位置上字符的值。
二、字符串操作库函数
1、C/C++
0)字符串的输入
scanf:遇到空格、回车、制表符就会中断输入
c
scanf("%s",s);
tex
"rexhao work" = "rexhao"
gets:遇到回车中断输入,但是不安全
c
gets(s);
tex
"rexhao work" = "rexhao work"
fgets:遇到回车中断输入,但是会算入换行
c
fgets(s,499,stdin);
tex
"rexhao work" = "rexhao work\n"
1)字符串赋值
将b赋值给a
c
char *strcpy(char *a, char *b);
2)字符串拼接
将b拼接在a后面(a必须有足够的空间)
c
char *strcat(char *a, char *b);
3)字符串比较
从第一个字符开始逐字符比较 ASCII 码,返回第一个不相同的ASCII码的差值,如果两个字符串完全相同,返回0。
c
int strcmp(char*str1, char *str2);
4)字符串长度
字符串长度,不包括\0
c
int strlen(char *s);
时间复杂度O(n^2) => 先存值再跑循环
2、Java
1)字符串赋值
使用等号 =
赋值
java
String a = "rexhao.work";
String b = a;
2)字符串拼接
使用加号 +
拼接
java
String a = "rexhao";
String b = "work";
String ans = a + "." + b;
3)字符串比较
Sting类的compareTo(String s)
方法
java
String a = "wmh";
String b = "wc";
int ans = a.compareTo(b); // 10
4)字符串获取单个字符
Sting类的charAt(int i)
方法
java
String a = "rexhao";
char c = a.charAt(2); // x
5)字符串查找
Sting类的indexOf(String s)
方法
java
String a = "rexhaohaohao";
System.out.println(a.indexOf("hao")); // 3
三、代码
1、子串出现次数
cpp
/**
* 子串出现次数
* @author 王铭颢
* @Date 2022/11/20 15:52
*/
#include "cstdio"
#include "cstring"
char s1[5000];
char s2[50];
int ans;
int main() {
scanf("%s", s1);
scanf("%s", s2);
int slen1 = strlen(s1);
int slen2 = strlen(s2);
int flag;
for (int i = 0; i < slen1 - slen2; ++i) {
flag = 1;
for (int j = 0; j < slen2; ++j) {
if (s1[i + j] != s2[j]) {
flag = 0;
break;
}
}
if (flag) ans++;
}
printf("%d", ans);
return 0;
}
2、最后一个字符串
输出最后一个输入的字符串
判题会用文件重定向,输入末尾存在EOF
调试窗口使用 Ctrl + Z
结束输入
cpp
/**
* 最后一个字符串
* @author 王铭颢
* @Date 2022/11/22 13:31
*/
#include "cstdio"
char s[105];
int main() {
while (scanf("%s", s) != EOF);
printf("%s", s);
return 0;
}