C++小结:继承和派生;string库;识别码转换

本文介绍了C++中的继承和派生概念,包括public、private和protected继承方式以及多继承可能导致的二义性问题。重点讨论了string库的使用,如读取、修改字符串及与字符数组的转化。此外,还涵盖了识别码的处理、字符串的比较方法以及友元关系。最后提到了sscanf和ssprintf函数在处理字符串格式化方面的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值