Skip to content

字符串处理

一、字符串的处理

1、c

字符串是编程语言中非常常用的一种数据类型,字符串的处理也是各类算法竞赛中考察较多的一类题型。字符串,简单地说,就是由若干个字符连接在一起的串。

C语言中规定:末尾以\0结束的字符数组称为字符串,否则只能算作字符数组。只有以\0结束的字符数组才能以%s的方式用 printf 输出。

字符数组

索引0123
字符abcd

字符串

索引01234
字符abcd\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;
}

Released under the MIT License.