IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 简单字符串处理 -> 正文阅读

[数据结构与算法]简单字符串处理

预告:我用两年写的新书《算法竞赛》,已于2022年2月交给清华大学出版社,预计于2022年7月出版。《算法竞赛》是一本“大全”,内容覆盖“基础-中级-高级”,篇幅700页左右。部分知识点的草稿已经在本博客发表。


?? 简单字符串题目,也就是不涉及复杂字符串算法的简单题。 在蓝桥杯省赛中很常见,几乎每届都有
?? 字符串算法有:进制哈希、Manacher、字典树、回文树、KMP 、AC自动机、后缀树和后缀数组、后缀自动机,在将出版的《算法竞赛》中详细解析
?? 本文介绍 C++、Java、Python的字符串处理函数。最后给出一些习题, 自己练习这些题,是最重要的

1. C++的字符串函数

??find()函数:查找
??substr()函数:查子串
??replace()函数:替换
??insert()函数:插入
??append()函数:添加字符串
??swap()函数:交换字符串
??compare():字符串比较
??有时候输入的一行字符中有空格,可以用gets()读取包括空格的这一行。
??下面的可执行代码,演示了这些函数的应用。

#include<bits/stdc++.h>
using namespace std;
int main(){
    string str ="123456789abcdefghiaklmn";

    for(int i=0;i<10;i++)   //把str看成一个字符串数组
        cout<<str[i]<<" ";
    cout << endl;

//find函数
    cout<<"123的位置:   "<<str.find("123")<<endl;
//输出:123的位置:   0
    cout<<"34在str[2]到str[n-1]中的位置:   "<<str.find("34",2)<<endl;
//输出:34在str[2]到str[n-1]中的位置:   2
    cout<<"ab在str[0]到str[12]中的位置:    "<<str.rfind("ab",12)<<endl;
//输出:ab在str[0]到str[12]中的位置:    9

//substr()函数
    cout<<"str[3]及以后的子串:"<<str.substr(3)<<endl;
//输出:str[3]及以后的子串:456789abcdefghijklmn
//若小于限制长度则报错
    cout<<"从str[2]开始的4个字符:"<<str.substr(2,4)<<endl;
//输出:从str[2]开始的4个字符:3456

//find()函数
    str.replace(str.find("a"), 5, "@#");
    cout<<str<<endl;
//输出:123456789@#fghiaklmn

//insert()函数
    str.insert(2, "***");
    cout<<"从2号位置插入: "<<str<<endl;
//输出:12***3456789@#fghiaklmn

//添加字符串:append()函数
    str.append("$$$");
    cout<<"在字符串str后面添加字符串:"<<str<<endl;
//输出: 12***3456789@#fghiaklmn$$$

//字符串长度
    cout<<str.size()<<endl;
    cout<<str.length()<<endl;

//交换字符串:swap()函数
    string str1="aaa",str2="bbb";
    swap(str1, str2);
    cout<<str1<<"  "<<str2<<endl;

//字符串比较函数:compare(),相等输出0,不等输出1
    cout<<str1.compare(str2)<<endl;
    if(str1==str2) cout <<"==";   //直接比较也行
    if(str1!=str2) cout <<"!=";

    return 0;
}

2. Python字符串处理

??Python的字符处理十分简洁。下面的可执行代码,给出各种应用的例子。

str1="12345678abcdefghi"
print(str1)      #输出:12345678abcdefghi
print(str1[3])   #输出:4
print(str1[2:5]) #输出:345       截取一部分,左闭右开
print(str1[:5])  #输出:12345
print(str1[2:])  #输出:345678abcdefghi
print(len(str1)) #输出字符串长度: 17

str2="***"
str3="abc"
#合并字符串:+
str12=str1+str2
print(str12)                 #输出:12345678abcdefghi***
#也可以这样合并字符串
print(''.join([str1, str2])) #输出:12345678abcdefghi***

str_list = list(str1)
str_list.insert(4, "***")     #在str1[4]插入
aa = ''.join(str_list)
print(aa)                     #输出:1234***5678abcdefghi

#重复输出
print(str2*2) #输出:******

#用\输出特殊符号
print("\\    \"    \n ")      #输出:\ "  换行

#查找子串
print(str3 in str1)           #输出:True
print(str3 not in str1)       #输出:False

str2,str3 = str3,str2         #交换
print(str2)                   #输出:abc

#比较
print(str2 == str3)           #输出:False
print(str2 != str3)           #输出:True

#str.find(str, beg=0, end=len(string))   指定范围查找
print(str1.find("345"))         #输出:2
print(str1.find("345", 10))     #输出:-1
print(str1.find("456", 2,20))   #输出:3

3. Java字符串函数

??Java的字符串处理函数很丰富。下面给出部分函数的说明。
??(1)substring()
??返回指定位置的子串。有两种形式:
??String substring(int startIndex),起始索引(包括startIndex), 索引从 0 开始。
??String substring(int startIndex,int endIndex)
起始索引(包括startIndex), 索引从 0 开始;结束索引(不包括endIndex)。

String Str = new String("This is haha");
System.out.println(Str.substring(4) );      //输出:is haha
System.out.println(Str.substring(4, 10) );   //输出:is ha

(2)concat()
??public String concat(String s)
??在字符串后面连接s,返回新字符串。

String s = "www:";
s = s.concat("abcde.com");
System.out.println(s);   //输出:www.abcde.com

??(3)replace()
??替换。
??public String replace(char searchChar, char newChar)
??用newChar字符替换字符串中出现的所有 searchChar 字符,并返回替换后的新字符串。

String Str = new String("abcde");
System.out.println(Str.replace('c', 'T'));  //输出:abTde

??(4)trim()
??删除字符串的头尾空格。
??(5)valueOf()
??返回给定参数的数值,参数可以是原生数据类型, String等。
??static Integer valueOf(int i)
??static Integer valueOf(String s)
??static Integer valueOf(String s, int radix)

Float a = Float.valueOf("80"); 
System.out.println(a);        //输出:80.0

??(6)toLowerCase()
??转换为小写
??char toLowerCase(char ch)

System.out.println(Character.toLowerCase('a'));     //输出:a
System.out.println(Character.toLowerCase('A'));     //输出:a

??(7)toUpperCase()
??转换为大写
??public String toUpperCase()

String Str = new String("www.com");
System.out.println( Str.toUpperCase() );    //输出:WWW.COM

??(8)length()
??字符串的长度

String Str1 = new String("www.com");
System.out.println(Str1.length());           //输出:7

??(9)charAt()
??截取一个字符
??public char charAt(int index)

String s = "www.com";
char result = s.charAt(6);
System.out.println(result);  //输出:m

??(10)getChars() 截取多个字符
??将字符从字符串复制到目标字符数组。
??void getChars(int sourceStart,int sourceEnd,char target[],int targetStart)
??sourceStart – 字符串中要复制的第一个字符的索引。
??sourceEnd – 字符串中要复制的最后一个字符之后的索引。
??target 目标数组。
??targetStart 目标数组中的起始偏移量。

String Str1 = new String("www.abcde.com");
char[] Str2 = new char[6];
Str1.getChars(4, 10, Str2, 0);
System.out.println(Str2 );    //输出:abcde

??(11)equals()和equalsIgnoreCase()
??比较两个字符串
??(12)regionMatches()
??检测两个字符串在一个区域内是否相等。
??(13)startsWith()和endsWith()
??startsWith()检测字符串是否以指定的字符串开始。endWith()检测字符串是否以指定的字符串结束。
??(14)compareTo()和compareToIgnoreCase()
??比较字符串
??(15)indexOf()和lastIndexOf()
??indexOf() 查找字符或者子串第一次出现的地方。
??lastIndexOf() 查找字符或者子串后一次出现的地方。

4. 习题

??下面做一些简单的字符串题目,都不涉及到算法或数据结构。这样的题目在蓝桥杯省赛中比较常见。
??请自己做这些题,这是最重要的。如果要看正确代码,每道题都有人发布题解,C++、Java、Python的都有。本文不再贴出代码。

标题统计 https://www.lanqiao.cn/problems/325/learning/
罗马数字 https://www.lanqiao.cn/problems/276/learning/
删除字符 https://www.lanqiao.cn/problems/544/learning/
扫雷游戏 https://www.lanqiao.cn/problems/358/learning/
潜伏者 https://www.lanqiao.cn/problems/519/learning
ISBN 号码 https://www.lanqiao.cn/problems/523/learning/
字符串的展开 https://www.lanqiao.cn/problems/536/learning/
FBI树 https://www.lanqiao.cn/problems/571/learning/
单词接龙 https://www.lanqiao.cn/problems/769/learning/
立体图 https://www.lanqiao.cn/problems/526/learning/
计算器的改良 https://www.lanqiao.cn/problems/771/learning/
串的处理 https://www.lanqiao.cn/problems/287/learning/
谁拿了最多奖学金 https://www.lanqiao.cn/problems/565/learning/
子串 https://www.lanqiao.cn/problems/365/learning/
表达式求值 https://www.lanqiao.cn/problems/378/learning
单词分析 https://www.lanqiao.cn/problems/504/learning
统计单词数 https://www.lanqiao.cn/problems/397/learning/
乒乓球 https://www.lanqiao.cn/problems/744/learning/
回文数 https://www.lanqiao.cn/problems/774/learning/

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-30 18:50:35  更:2022-03-30 18:50:48 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/9 1:57:22-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码