逻辑君


私信TA

用户名:dotcpp0736634

访问量:105

签 名:

真理永远以逻辑为基础

等  级
排  名 55409
经  验 250
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校
专  业

  自我简介:

TA的其他文章

    在一些比赛中,有关字符串的题型是非常多的。此文章主要介绍一些字符串的用法。本文用的语言是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 人评分

  评论区

  • «
  • »