String各种字符串

今天要刷一刷字符串的类型题,在机试中总是会涉及到,而且属于简单题,所以应该是必须要做出来的那种。

最好用的就是String模板了

#include<string>

下面列出来主要的几个string函数:

a) =,assign()     //赋以新值
b) swap()     //交换两个字符串的内容
c) +=,append(),push_back() //在尾部添加字符
d) insert(t,a) //插入字符,在t下标的位置之前插入字符串a
e) erase(t,a.size()) //删除字符,删除从t位置开始,长度为a.size()的字符串
f) clear() //删除全部字符
g) replace(t,a.size(),b) //将从t位置开始,长度为a.size()的字符串替换为b
h) + //串联字符串
i) ==,!=,<,<=,>,>=,compare()    //比较字符串
j) size(),length()    //返回字符数量
k) max_size() //返回字符的可能最大个数
l) empty()    //判断字符串是否为空,是空时返回ture,不是空时返回false

有几点要注意:

一般先定义 char str[200];

然后用 gets(str);读入 (另外在vs2015之后的 版本要用gets_s,在各种oj平台上要用gets)

然后再转换成string类型 string a=str;

下面看几个例子

例一:九度1168

题目描述:

给定一个短字符串(不含空格),再给定若干字符串,在这些字符串中删除所含有的短字符串。

输入:

输入只有1组数据。
输入一个短字符串(不含空格),再输入若干字符串直到文件结束为止。

输出:

删除输入的短字符串(不区分大小写)并去掉空格,输出。

样例输入:
in
#include 
int main()
{

printf(" Hi ");
}
样例输出:
#clude
tma()
{

prtf("Hi");
}
#include<stdio.h>
#include<string>
#include<iostream>
#include<ctype.h>
using namespace std;
int main() {
	char str[101];
	gets_s(str);
	string a = str;
	int i, j;
	for (i = 0; i < a.size(); i++) {
		a[i] = tolower(a[i]);
	}
	while (gets_s(str)) {
		string b = str;
		string c = b;
		for (i = 0; i < b.size(); i++) {
			b[i] = tolower(b[i]);
		}
		int t = b.find(a, 0);  //从b的第0个位置开始找字符串a
		while (t != string::npos) {  //若查找成功 则循环
			b.erase(t, a.size()); //删除从t位置开始 长度为a.size()的字符串
			c.erase(t, a.size());
			t = b.find(a, 0);
		}
		t = c.find(' ', 0); // 查找原字符串中的空格
		while (t != string::npos) {
			c.erase(t, 1); // 删除空格
			t = c.find(' ', 0);
		}
		cout << c << endl;
	}
}

例二 九度1111

题目描述:

输入一个字符串,以回车结束(字符串长度<=100)。该字符串由若干个单词组成,单词之间用一个空格隔开,所有单词区分大小写。现需要将其中的某个单词替换成另一个单词,并输出替换之后的字符串。

输入:
多组数据。每组数据输入包括3行,
第1行是包含多个单词的字符串 s,
第2行是待替换的单词a,(长度<=100)
第3行是a将被替换的单词b。(长度<=100)
s, a, b 最前面和最后面都没有空格.

输出:
每个测试数据输出只有 1 行,
将s中所有单词a替换成b之后的字符串。

样例输入:
You want someone to help you
You
I

样例输出:

I want someone to help you
注意这道题目的陷阱:

替换的是单词,如果

Youwant someone to help you

You

I


#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int main() {
	char str[101];
	while (gets_s(str)) { //注意在vs2015编译器下是get_s,但是在其他oj上提交的时候用gets
		string a = str;
		gets_s(str); //注意gets和puts只能用于char类型的字符串
		string b = str;
		gets_s(str);
		string c = str;
		int i, j;
		int t = a.find(b, 0);  //在字符串a中从头开始寻找b字符串
		while (t != string::npos) {
			if ((t == 0 || a[t - 1] == ' ') && (a[t + b.size()] == ' '|| t + b.size()==a.size())) {
				a.erase(t, b.size());
				a.insert(t, c);
				//以上两行也可以用replace代替
				a.replace(t, b.size(), c);
			}
			t = a.find(b, t+1);
		}
		cout << a << endl; //注意string类型的字符串只能用cout或printl输出
	}
}

例三 POJ2934

描述
有两个字符串str和substr,str的字符个数不超过10,substr的字符个数为3。(字符个数不包括字符串结尾处的'\0'。)将substr插入到str中ASCII码最大的那个字符后面,若有多个最大则只考虑第一个。
输入
输入包括若干行,每一行为一组测试数据,格式为
str substr
输出
对于每一组测试数据,输出插入之后的字符串。
样例输入
abcab eee
12343 555
样例输出
abceeeab
12345553

#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
int findmax(string a) {
	int max=a[0];
	int t=0;
	for (int i = 0; i < a.size(); i++) {
		if (a[i] > max) {
			max = a[i];
			t = i;
		}
	}
	return t;
}
int main() {
	char str[11];
	char substr[4];
	while (scanf("%s %s", str, substr)!=EOF) {
		
		string a = str;
		string b = substr;
		int t = findmax(a);
		a.insert(t + 1, b);
		cout << a<<endl;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值