蓝桥杯省赛基础知识点 | 简单字符串处理
admin
2022-04-20 07:49:58
0

原标题:蓝桥杯省赛基础知识点 | 简单字符串处理

简单字符串题目,也就是不涉及复杂字符串算法的简单题。 在蓝桥杯省赛中很常见,几乎每届都有。

字符串算法有:进制哈希、Manacher、字典树、回文树、KMP 、AC自动机、后缀树和后缀数组。

本文介绍 C++、Java、Python的字符串处理函数。

01

C++的字符串函数

find函数:查找

substr函数:查子串

replace函数:替换

insert函数:插入

append函数:添加字符串

swap函数:交换字符串

compare:字符串比较

有时候输入的一行字符中有空格,可以用gets读取包括空格的这一行。

下面的可执行代码,演示了这些函数的应用。

# include

usingnamespacestd;

intmain{

stringstr = "123456789abcdefghiaklmn";

for( inti= 0;i< 10;i++) //把str看成一个字符串数组

cout<" ";

cout<< endl;

//find函数

cout<< "123的位置: "<"123")<< endl;

//输出:123的位置: 0

cout<< "34在str[2]到str[n-1]中的位置: "<"34", 2)<< endl;

//输出:34在str[2]到str[n-1]中的位置: 2

cout<< "ab在str[0]到str[12]中的位置: "<"ab", 12)<< endl;

//输出:ab在str[0]到str[12]中的位置: 9

//substr函数

cout<< "str[3]及以后的子串:"<3)<< endl;

//输出:str[3]及以后的子串:456789abcdefghijklmn

//若小于限制长度则报错

cout<< "从str[2]开始的4个字符:"<2, 4)<< endl;

//输出:从str[2]开始的4个字符:3456

//find函数

str.replace(str.find( "a"), 5, "@#");

cout<endl;

//输出:123456789@#fghiaklmn

//insert函数

str.insert( 2, "***");

cout<< "从2号位置插入: "<endl;

//输出:12***3456789@#fghiaklmn

//添加字符串:append函数

str.append( "$$$");

cout<< "在字符串str后面添加字符串:"<endl;

//输出:12***3456789@#fghiaklmn$$$

//字符串长度

cout<endl;

cout<endl;

//交换字符串:swap函数

stringstr1= "aaa",str2= "bbb";

swap(str1, str2);

cout<" "<endl;

//字符串比较函数:compare,相等输出0,不等输出1

cout<endl;

if(str1==str2) cout<< "=="; //直接比较也行

if(str1!=str2) cout<< "!=";

return0;

}

02

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 instr1) #输出:True

print(str3 notinstr1) #输出: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

03

Java字符串函数

Java的字符串处理函数很丰富。下面给出部分函数的说明。

(1)substring

返回指定位置的子串。有两种形式:

String substring(int startIndex),起始索引(包括startIndex), 索引从 0 开始。

String substring(int startIndex,int endIndex)

起始索引(包括startIndex), 索引从 0 开始;结束索引(不包括endIndex)。

String Str = newString( "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 字符,并返回替换后的新字符串。

StringStr = newString( "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

StringStr = newString( "www.com");

System.out.println( Str.toUpperCase ); //输出:WWW.COM

(8)length

字符串的长度

StringStr1 = newString( "www.com");

System.out.println(Str1.length); //输出:7

(9)charAt

截取一个字符

public char charAt(int index)

String s = "www.com";

charresult = 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 = newString( "www.abcde.com");

char[] Str2 = newchar[ 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 查找字符或者子串后一次出现的地方。

实例讲解

算法竞赛

往期回顾

蓝桥杯省赛

基础知识点 | 全排列函数和自写排列

BFS最短路径的两种打印方法

多重背包问题和“二进制拆分”

04

参考书籍

《算法竞赛入门到进阶》

ISBN:978-7-302-52915-6

罗勇军 郭卫斌 编著

定价:59.8元

扫码优惠购书

内容简介

本书是算法竞赛的入门和进阶教材,包括算法思路、模板代码、知识体系、赛事相关等内容。本书把竞赛常用的知识点和竞赛题结合起来,讲解清晰、透彻,帮助初学者建立自信心,快速从实际问题入手,模仿经典代码解决问题,进入中级学习阶段。

全书分为12章,覆盖了目前算法竞赛中的主要内容,包括算法竞赛概述、算法复杂度、STL和基本数据结构、搜索技术、高级数据结构、基础算法思想、动态规划、数学、字符串、图论、计算几何。

本书适合用于高等院校开展的ICPC、CCPC等算法竞赛培训,中学NOI信息学竞赛培训,以及需要学习算法、提高计算思维的计算机工作者。

05

精彩推荐

  • 微信小程序游戏开发│猜数字小游戏(附源码+视频)

  • Flink编程基础│Scala编程初级实践

  • Flink编程基础│FlinkCEP编程实践

  • Flink编程基础│DataStream API编程实践

  • Flink编程基础│DataSet API编程实践

  • 数 据分析实战│客户价值分析

  • 数据分析实战│价格预测挑战

  • 数据分析实战│时间序列预测

  • 数据分析实战│KaggleTitanic生存预测

相关内容