• #字符串 字符串处理


    字符串处理

    字符串处理是竞赛中的常见题目,除了简单的字符串查找、替换、匹配等问题以外,还有比较复杂的字符串算法,其中应用广泛的有字符串哈希、KMP、字典树(Trie Tree),AC自动机和后缀数组等。

    字符串基本操作

    读入
    查找
    替换
    截取
    数字和字符串转换
    读入		gets()和getchar()
    读字符:		char ch1;ch1=getchar();
    读字符串:		char str[1002];gets(str);
    String类:		string str;getline(cin,str);
    

    POJ 3981 字符串替换

    编写一个C++程序实现将字符串中的所有"you"替换成"we"
    Input
    输入包含多行数据 
    每行数据是一个字符串,长度不超过1000 
    数据以EOF结束
    Output
    对于输入的每一行,输出替换后的字符串
    Sample Input
    you are what you do
    Sample Output
    we are what we do
    85 wind
    83 memory
    

    【C程序1】

    下面的程序一次读取一个完整的字符串,用gets()函数实现。
    在比赛中不建议使用gets()函数。
    
    #include<cstdio>
    char str[1002];
    int main(){
    	int i;
    	while(gets(str)!=NULL){
    		for(int i=0;str[i]!='';i++){
    			if(str[i]=='y'&&str[i+1]=='o'&&str[i+2]=='u'){
    				printf("we");
    				i+=2;
    			}
    			else
    				printf("%c",str[i]);
    		}
    		printf("
    ");
    	}
    	return 0;
    } 
    

    【C程序2】

    下面的程序一次只读一个字符,用getchar()函数实现。这个程序比上一个程序要好,因为它不需要定义一个字符串数组,当然也不用考虑数组的大小。
    
    #include<cstdio>
    int main(){
    	char ch1,ch2,ch3;
    	while((ch1=getchar())!=EOF){
    		if(ch1=='y'){
    			if((ch2=getchar())=='o'){
    				if((ch3=getchar())=='u')
    					printf("we");
    				else
    					printf("yo%c",ch3);
    			}else
    				printf("y%c",ch2);
    		}
    		else
    			printf("%c",ch1);
    	}
    	return 0;
    }
    
    使用cin读入字符串时,遇到空白就停止读取,有时我们想把一个句子存下来,又不想创建多个string来存储单词,怎么办?
    那就用getline来获取一整行内容。
    

    【C程序3】

    下面的程序用到string类,getling()函数

    #include<iostream>
    #include<string>
    using namespace std;
    int main(){
    	string str;
    	int pos;
    	while(getline(cin,str)){
    		while((pos=str.find("you"))!=-1)
    			str.replace(pos,3,"we");
    		cout<<str<<endl;
    	}
    	return 0;
    }
    
    C++ STL中最基本以及最常用的类或容器无非就是以下几个:vector、set、list、map、String
    用string初始化字符串分两类:用“=”号就是拷贝初始化,否则就是直接初始化。
    

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    使用const_iterator使得访问元素时是能读不能写,这跟常量指针意思差不多。
    string str("hi you");
    for (string::const_iterator it = str.begin(); it != str.end(); it++){
    cout << *it << endl;
    *it = 'k'; //这是错误的,不能写
    }

    C++ 字符串长度:

    求字符串长度用.size()或者.length()
    不要用sizeof()

    c++ 删除字符串指定位置的字符

    string erase(int start, int len);
    //start为要删除字符的起始位置(从0数起),len为要删除字符的个数。

    截取子串

    s.substr(pos, n) //截取s中从pos开始(包括0)的n个字符的子串,并返回
    s.substr(pos) //截取s中从从pos开始(包括0)到末尾的所有字符的子串,并返回

    替换子串

    s.replace(pos, n, s1) //用s1替换s中从pos开始(包括0)的n个字符的子串

    查找子串

    s.find(s1) 查找s中第一次出现s1的位置,并返回(包括0)
    s.rfind(s1) 查找s中最后次出现s1的位置,并返回(包括0)
    s.find_first_of(s1) 查找在s1中任意一个字符在s中第一次出现的位置,并返回(包括0)
    s.find_last_of(s1) 查找在s1中任意一个字符在s中最后一次出现的位置,并返回(包括0)
    s.fin_first_not_of(s1) 查找s中第一个不属于s1中的字符的位置,并返回(包括0)
    s.fin_last_not_of(s1) 查找s中最后一个不属于s1中的字符的位置,并返回(包括0)

    字符串基本操作练习列表:

    760 字符串长度 60.54% 简单
    761 字符串中的数字个数 51.48% 简单
    762 字符串匹配 25.98% 简单
    763 循环相克令 42.67% 简单
    764 输出字符串 31.50% 简单
    765 字符串加空格 53.89% 简单
    766 去掉多余的空格 66.67% 简单
    767 信息加密 43.23% 简单
    768 忽略大小写比较字符串大小 34.18% 简单
    769 替换字符 72.00% 简单
    770 单词替换 51.89% 中等
    771 字符串中最长的连续出现的字符 60.00% 中等
    772 只出现一次的字符 40.88% 中等
    773 字符串插入 48.28% 中等
    774 最长单词 52.03% 中等
    775 倒排单词 81.82% 中等
    776 字符串移位包含问题 44.23% 困难
    777 字符串乘方 78.12% 困难
    778 字符串最大跨距 37.86% 困难

    补上ASCII表

  • 相关阅读:
    了解HTTP Header之User-Agent和HTTP协议的响应码
    怎样才算一个优秀的管理者
    ldpi、mdpi、hdpi、xhdpi、xxhdpi (无内容,待填)
    手把手教做小偷采集
    java中碰到无法解决的问题:无法访问类的getter访问器
    简单的加密解密处理
    Java中处理二进制移位
    Java中实现String.padLeft和String.padRight
    这短短几行代码价值一万
    从一篇文章中检查特定单词出现数量和第一次出现位置
  • 原文地址:https://www.cnblogs.com/yuanyulin/p/14026716.html
Copyright © 2020-2023  润新知