1.C++程序设计:利用------实现软件重用,可以多继承(允许一个派生类继承多个基类)。
基类的对象可以作为派生类的对象使用:--------规则。
派生说明符号public、private、protected,默认为—
protected:只能在基类及其派生类中访问。
public派生:基类和派生类的成员性质-------;
protected派生:派生类成员性质public-------,protected不变;(public-》protected)
继承方式中基类的私有成员在派生类中均------直接访问
相互关联的个各类之间的关系主要分为:-----关系和-----关系。
派生类的构造函数有三项工作:—初始化,—初始化,-----。
友元关系:是-----的关系。
二义性:多继承,多个基类具有相同的基类时出现,采用------消除该问题。
继承、类的兼容性规则、private、不变、降级、不能
组合关系、继承关系;
基类,成员对象,执行派生类构造函数体。
类与类的关系;一个类的成员函数与另一个类的关系。
虚基类
2.判断题
一个派生类可以作为另外一个派生类的基类()
友元关系不能继承()
T、T
string库
索引 index 都是从0开始计算
读取字符串
string str;
cin>>str; (空格后后面不会读了 因为\0 )
和scanf("%s",a);一样只接收回车结束输入
在C中%s是不需要加取地址符号的 ,识别空格为字符串结尾
getchar() 吸收换行符
getline(cin,name);
和gets一样识别`\n`为结尾
#includd< string>
string str="hello my friend";
等于 string str; str="hello my friend"
等于 string str = { "hello,word" };
索引访问
str.at(0): 越界会报错,安全检查。
str[0]
第一个和最后一个元素
str.front()
str.back();
字符串长度
str.size();
str.length();
容量
str.capacity()
最大值
str.max_size()
改变字符串长度,用第二参数去填充
str.resize([sizelength],[replace])
清空字符串
str.clear()
判断字符串位空
str.enpty()
Iterator迭代器
重写指针访问的方式,不是指针
for (string::iterator it = str.begin(); it != str.end(); ++it)
{
cout << *it << " ";
}
指向第一个元素的迭代器
str.begin()
指向最后元素的下一个元素
str.end()
*it元素
修改字符串
str+str2;不修改原字符串
对原字符串后面增补字符串,后面添加字符串从index(0~length)起始共number个
str.append(str2,[index],[number])
str.append(str2,[index])
变化字符串 str=从[start]~[start+length]的str2 比=str2效率高
str.assign(str2,[start],[length])
str.assign(str2,[length])
插入
str.insert([index],str2,[start],[end])
子串替换为别的字符串
str.replace([index],length,str);
弹出最后一个字符
str.pop_back()
文件
#include<fstream>
文件流:标准输入文件流ifstream
string str;
ifstream file("[文件路径]")
while(!file.eof())
{
str.push_back(file.get());
}
将字符添加到最后
str.push_back()
字符串与其他类型的转化:.c_str() 转化为字符数组
atoi:string转为int类型的返回值
atiof:sring转为double类型
string str = "5468762";
int number = atoi(str.c_str());
在字符串里找字符串:find返回子串在[index]之后第一次出现的索引;! string::npos
int found = str.find(str2,[index])
string str = "2202202222220";
string str2 = "22";
int found = str.find(str2);
while (found != string::npos)
{
cout << found << endl;
found = str.find(str2,found+1);
}
0 3 6 7 8 9 10
str.find_last_of(str2):11
str.find_first_of("str2");
返回str2中任意一个字母在str中首次出现的位置。
子串:取str从[index]开始的[length]个
str.substr([index],[length])
比较 compare
str.compare([index],[length],str2);
只有返回0相等
去掉字符串最后一个字符(比如说2a后的a)
str.pop_back()
识别码:
string 98-65-32-174 读取其中的数字
int main()
{
string isbn;
getline(cin,isbn);
int num[4] = { 0 }, sum = 0, k = 0;
for (int i = 0; i < isbn.size(); i++)
{
if (isbn[i] != '-') {
sum = sum * 10 + (isbn[i] - '0');
}
if (isbn[i] == '-' ) {
num[k++] = sum;
sum = 0;
}
}
num[k] = sum;
for (int i = 0; i < 4; i++)
{
cout << num[i] << endl;
}
}
规范化
#include<iomanip>
补全:用0来补全,宽度为2
cout <<setfill(’0‘)<<setw(2)<< an[i];
输出三位小数点
str<<fixed<<setprecision(3)<<number;
比较方法
是string类型
#include< string>
相同长度的string确实可以比较大小
不同长度的则 越长的越大
是char []字符串数组类型。
C:string.h 中strcmp(str1,str2)
#include<string.h>
“aaaa”<"aab“
与c++是不同的
返回 正数 0 负数
例如:
在排序时候:如果需要按照姓名字典序小
排序用strcmp:
bool comp(Student i, Student j)
{
if (i.score != j.score) return i.score > j.score;
else return strcmp(i.name, j.name) < 0;
}
如果找对应的元素的时候可以用两个数组:一个用来保存找的,一个用来保存找到的。
- 如果有固定解密方法,设置两个数组,一个保存密码,一个保存密文。
- 如果需要自己找解密方法,并且还有可能找不到解密方法,需要定义两个数组。
int book[26] = { 0 }, downbook[26] = { 0 };
·一个用来记录密码出现过没有,一次记录解密的密文出现过没有。
举例1:
密码: AB
译文: AA 用downbook数组记录译文字母有没有出现过
举例2:
密码: AA
译文: AB 用book数组记录密码字母有没有出现过。
这时两种情况直接出现错误
sscanf,ssprintf
sscanf::将字符数组 str[200] 写成 % 格式的 别的类型变量;
ssprintf:将别的类型变量 以 % 的格式 写成字符数组
sscanf:
double n;
char b[13] = "123888212188";
sscanf(b, "%lf", &n);
sprintf
double n = 215648.2;
char str[100];
sprintf(str,"%.2lf", n);
printf("%s", str);