在一些比赛中,有关字符串的题型是非常多的。此文章主要介绍一些字符串的用法。本文用的语言是c++,会用到STL库中的函数。
1、我们先引用头文件 #include<cstring> 或者用万能头文件#include<bits/stdc++>(注:在蓝桥杯中尽量不用万能头文件,编译时间会大大增加)
2、写字符串,c++中, 字符串的定义通常直接 string s; 这样写的话要注意下标从0开始。或者直接用字符数组char s[];
3、字符串的遍历:
当我们定义字符串后 可以直接输入字符串即 cin>>s; 不用像数组那样在for循环里面输入,然后我们可以用 s.size()来看出s的大小,此时我们在需要遍历字符串时
可以直接 for(int i=0; i<s.size();i++) (注:由于从0开始,所以i是遍历到s.size()-1的位置。
4、字符串的输出:
我们知道,字符串的输入是在定义string s;后直接cin >> s;那么输出是在遍历中输出,即for(int i=0; i<s.size(); i++) cout << s[i]; 因为输出是将你输入的每一个字符输出出来,它是由输出限制的,即要小于你输入的长度-1。而输入没有限制,所以可以直接输入cin>>s;
5、字符串的一些操作:
1)字符串的转化:将字符串转数字 可以直接用函数 stoi(s) 即 int a = stoi(s);或者 a = stol(s); 你还可以将字符串的每一个字符进行转化,通常是将字符型数字串转化为整型数字串, for(int i=0; i<s.size(); i++) {int a; a = s[i] - '0'; cout << a <<' '; } 注意不是一个数字,例如: string s = "123"; 此时每次都会输出a,最后会依次输出 1 2 3 不是整数123。通过这种方式,我们可以求出字符串中所代表的数字总和 for(int i=0; i<s.size();i++) {int sum=0; sum += s[i];}
将字符数组转换为数字 例如 const char *str = "42"; int num = atoi(str);
int main() {char str[] = "1234"; int num = atoi(str);} //将字符串“1234”转换为整数1234
2) 将数字转换为字符串 string s = to_string(i);//i为数字
蓝桥杯填空题: 找出从2023到20231122中所有出现1122的个数
int main() {
string ss = "1122"; //定义一个子串
int ans = 0; //记录个数
for(int i = 2023; i<20231123; i++){ //从数字2023遍历到20231122
string s = to_string(i); //从数字2023遍历到20231122将每一个数字转换为字符串
if(s.find(ss) != string::npos) {//该表达式为,如果字符串s中包含子字符串ss,就返回true即为真
//s.find(ss)会返回ss在s中第一次出现的位置如果没有找到就返回string::npos
ans ++;
}
}
cout << ans <<endl;
return 0;
}
3) 字符串的后移: 输入一个字符串,找到它的后n为并将其输出 string s; cin >> s; cin >> n; for(int i=0;i<s.size(); i++) {s[i] += n; cout << s[i]; } 即将每个字符都向后索引到了其后四位 a ->e
4) 对于子串采用 substr()函数 s从0到s.size()
s1 = s.substr(0, i); 表示s主串中从0到i-1的子串 s2 = s.substr(i);表示从i到s.size()的子串
5)字符串翻转采用STL库中的reverse 头文件为#include<algorithm>
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main() {
string str = "Hello";
reverse(str.begin(), str.end());
cout << str<<endl; //输出 olleH
return 0;
}
6)字符串的复制和拼接
复制
对于定义的是char数组 char name[10];可以采用函数strcpy()
int main() {
char name[10];
const char* str = "A";
strcpy(name, str); //将str复制到name中
cout << name<<endl; //输出 A
}
采用string s;
int main() {
string s;
s = 'a';
cout<< s <<endl; //输出a
}
拼接
同上,可以采用函数strcat()
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char str1[15]= "Hello";
char str2[7] = " World";
strcat(str1,str2);
cout << str1 << endl;//输出 Hello World
return 0;
}
使用string s
int main() {
string s = "Hello, ";
s += “World";
cout << s <<endl; //输出Hello, World
return 0;
}
7) 字符串的比较
这也是一样的,如果是char数组就用 strcmp(A, B)函数, 数组A和数组B比较, 如果string 的话就直接比较
这里我只写string
int main() {
string s1 = "apple";
string s2 = "bnabn";
if(s1==s2) cout << "相等";
else cout << "不等";
}
对于字符串的算法有很多,比如马拉车算法还有KMP。这里的一些基本操作可以更好的去理解算法的操作。
0.0分
2 人评分
C语言程序设计教程(第三版)课后习题11.1 (C语言代码)浏览:822 |
C语言程序设计教程(第三版)课后习题10.1 (Java代码)浏览:1492 |
【排队买票】 (C语言代码)浏览:944 |
【偶数求和】 (C语言代码)浏览:588 |
2005年春浙江省计算机等级考试二级C 编程题(2) (C语言代码)浏览:672 |
C语言训练-数字母 (C语言代码)浏览:648 |
核桃的数量 (C语言代码)浏览:726 |
母牛的故事 (C语言代码)浏览:1045 |
2003年秋浙江省计算机等级考试二级C 编程题(1) (C语言代码)浏览:721 |
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:729 |