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的读入和遍历基础
#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的加法和比较运算
#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 打印小写字母表
#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。
例:
#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 【基础】找字典码最小的字符串