Skip to content

6.1 string基础/读入/遍历√

发布时间:

一、string基础知识

1、什么是string?

string是C++的STL (Standard Template Library即标准模板库) 提供的字符串类,用于处理字符串相关的问题。

2、string和char s[]有什么区别?

(1)字符数组本质上还是数组,因此长度固定;string可以理解为长度不限的字符串;
(2)字符数组的系统定义的函数过少,导致操作不方便;string集成大量的系统函数,方便操作;
(3)字符数组由于本质是数组,因此不能进行比较运算以及+运算;string 可以直接做比较和+运算;

二、string的读入和遍历

2.1 string的读入和遍历基础知识

getline(cin,s): 读入一个字符串(直到换行), 可以含空格;
cin:读入一个字符串,不能含空格;
s. size(): 求字符串s的长度;
s[下标i]:获取字符串的某个下标对应的字符;
(5) 掌握string的+的用法,注意string 使用下标常见的错误;(例题: 1093: 【入门】打印小写字母表,请用string的+法来实现;)

例1:string的读入和遍历基础

js
#include <bits/stdc++. h>
using namespace std;
int main(){
    string s;

    //  cin>>s;
    cout<<s.size()<<endl;
    getline(cin,s);
    cout<<s<<endl;
    //遍历字符串每个字符
    int i;//i作为string的下标
    //s. size(): 求字符串s 的 长度
    for(i = 0;i < s. size();i++){
        cout<<s[i]<<endl;
    }
    cout<<"-"<<endl;
    string s2;
    s2 = "hello world!";
    cout<<s2<<endl;
}
   

例2:string的加法和比较运算

js
#include <iostream>
using namespace std;
int main(){
    //在字符串s上,累加字符串
    string s;
    s = s + "hello";
    s = s + " student.";
    cout<<s<<endl;
    //在字符串s 上,累加字符
    string s2;
    s2 = s2 + 'h';
    s2 = s2 + 'i';
    cout<<s2<<endl;
    //常见错误
    /*
        string s3;
        cout<<s3. size()<<endl;
        //s3是一个长度为0的字符串
        //不能访问下标0和下标1,数组下标越界了
        s3[0] = 'h';
        s3[1] = 'i';
        cout<<s3<<endl;
    */
    string s4 = "ok";
    s4[0] = 'h';
    s4[1] = 'i';
    cout<<s4<<endl;
}
   

例3 打印小写字母表

js
#include <bits/stdc++.h>
using namespace std;

int main(){
    string s;//字符串
    char c;
    for(c ='a';c<= 'z';c++){
        s = s + c;
        if(c == 'm'|| c =='z'){
            s = s + '\n';
        }

    }
    for(c ='z';c >= 'a';c--){

        s = s + c;


    }
    cout<<s;
}
   

2.2 课堂练习

练习1 【入门】时间的差 注意:string类型的变量获取其中的某一位,是 char 类型!

练习2 【入门】数字和
思路:用字符串读入一个长整数,遍历每一位,将这一位字符对应的真实整数加到总和上。
注意:
1、理解局部变量和全局变量的差异!
● (1)、定义位置不同:全局变量定义在main函数的外面,局部变量定义在函数内部;
● (2)、生命周期不同:局部变量,仅在变量定义时对应的大括号的闭括号中有效;全局变量,在所有函数中都有效;
● (3)、是否有初值:

局部变量定义不赋值,则初始值随机;
全局变量定义不赋值,int初值为0,小数初值为0.0,字符类型初值’\0’,bool初值false, int a[100]初值都为0。
例:

js
#include <bits/stdc++. h>
using namespace std;
int a,b,c; //全局变量
int main(){
    int x,y,z;//局部变量
}
   

练习3 【基础】国王的魔镜
思路:判断字符串是否可能接触过镜面,如果可能,则判断其一半是否可能接触过镜面,直到最终的字符串不可能接触过镜面,长度就是最小长度!
分解问题:
(1)判断一个字符串是否可能接触过镜面
回文、长度是偶数: ABBAABBA、ABAABA
(2)如果可能,则取一半
ABBAABBA (3) 可用递归方法 如果为长度为偶数或非对称数,返回字符串长度,否则字符串取一半后重复调用自己。

练习4 【入门】简单加密
思路:循环加密字符串的每个字符,如果是大写字母则解密!
如果密文是F~Z,则直接-5;
如果密文是A~E, 则直接+(‘V’ - ‘A’)

练习5 【基础】找字典码最小的字符串

2.3 课后作业

  1. 【入门】字符串对比
  2. 【入门】出现次数最多的小写字母
  3. 【入门】判断是否构成回文
  4. 【【入门】字符串中的空格移位
  5. 【基础】删除字符串中间的*
  6. 【入门】字符串的反码
  7. 【入门】看完动漫要几天?
  8. 【基础】时钟旋转 (2)
  9. 【入门】字符串加密?