【作业】21~48

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

作业21~48


21.编写一个函数,要求输入年月日时分秒,输出该年月日时分秒的下一秒。

如 输入 2004 年 12 月 31 日 23 时 59 分 59 秒,则输出 2005 年 1 月 1 日 0 时 0 分 0 秒。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int yearRun(int year)
{
	if (year % 4 == 0 && year % 100 != 0 | year % 400 == 0)return 1;
	else return 0;
}

int main()
{
	int year, month, day, hour, minute, second;
	int monthDay[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
	int flag;
	scanf("%d%d%d%d%d%d", &year, &month, &day, &hour, &minute, &second);
	flag = yearRun(year);
	if (flag == 1)monthDay[2] = 29;
	int month2=0, day2=0, hour2=0, minute2=0, second2=0;
	second += 1;
	if (second == 60)second = 0, second2 = 1;
	if (second2 == 1)minute += 1;
	if (minute == 60)minute = 0, minute2 = 1;
	if (minute2 == 1)hour += 1;
	if (hour == 24)hour = 0, hour2 = 1;
	if (hour2 == 1)day += 1;
	if (day > monthDay[month])day = 1, month2 = 1;
	if (month2 == 1)month += 1;
	if (month > 12)month = 1, year += 1;
	printf("%d年%d月%d日%d时%d分%d秒", year, month, day, hour, minute, second);
	return 0;
}

在这里插入图片描述

22. 编写一个程序,交换两个数,不用第三块儿内存。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

int main()
{
	int a, b;
	scanf("%d%d", &a, &b);
	a = a ^ b;
	b = a ^ b;
	a = a ^ b;
	printf("a=%d,b=%d", a, b);
}

在这里插入图片描述

23.有一段文本,统计其中的单词数。例如:

As a technology , “HailStorm” is so new that it is still only known by
its code name. 注意:单词间的间隔不一定是一个空格。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<ctype.h>
#include<string.h>

int main()
{
	char text[100];
	gets(text);
	int cout = 0;
	for (int i = 0; i < strlen(text); i++)
	{
		if (i == 0 && isalpha(text[0]))cout++;
		else if (isalpha(text[i]) && !isalpha(text[i - 1]))cout++;
	}
	printf("%s 的单词数为 %d 个\n", text, cout);
	return 0;
}

在这里插入图片描述

24. 国际象棋有 8×8 格,每个格子可放一个棋子。

皇后的规则是可以横、竖、 斜移动。在一个棋盘放置 8 个皇后,并使它们互相无法威胁到彼此。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main()
{
	//(cnt,queen[cnt])表示皇后的坐标
	int queen[8] = { 0 };
	int cnt = 0;
	int colExist = 0;
	int sum = 0;
	while (1) {
		int isAttack = 0;

		if (cnt == 1 && queen[0] == 7 && colExist == 6) {
			break;
		}
		//是否被攻击
		for (int i = 0; i < cnt; i++) {
			if (queen[i] == colExist) {
				isAttack = 1;
			}
			int rowDistance = cnt - i;//i!=cnt,皇后A的坐标(i,queen[i])
			//皇后B的坐标(cnt,colExist)||(cnt,queen[cnt])
			int colDistance = queen[i] - colExist;//等价于queen[i]-queen[cnt]
			if (rowDistance == colDistance || rowDistance == -colDistance) {
				isAttack = 1;
			}
		}
		//如何放置
		if (isAttack == 0) {
			queen[cnt] = colExist;
			cnt++;
			colExist = 0;
			if (cnt == 8) {
				for (int i = 0; i < 8; i++) {
					printf("%d ", queen[i] + 1);
				}
				printf("\n");
				sum++;
				//*** 回溯算法 ***//
				do {
					cnt--;
					colExist = queen[cnt] + 1;
				} while (colExist >= 8);
			}
		}
		//没有放置的位置,放下一列,没有空列,回溯
		else {
			colExist++;
			while (colExist >= 8) {//回溯
				cnt--;//上一个皇后
				colExist = queen[cnt] + 1;//上一个皇后改变位置,放下一列
			}
		}
	}
	printf("总共有%d种摆法\n", sum);
	return 0;
}

在这里插入图片描述


25. 有一字符串 a,内容为:My name is Li jilin.,另有字符串 b,内容为:

Mr. Zhang Haoling is very happy.写一函数,将字符串 b 中从第 5 个到第 17个字符复制到字符串 a 中,取代字符串 a 中第 12 个字符以后的字符。输出新的字符串。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void fun(char a[], char b[]) {
	int i, j;
	for (i = 4, j = 0; i < 17; i++, j++)
		a[12 + j] = b[i];
	a[12 + j] = '\0';
	puts(a);
}

int main()
{
	char a[100], b[100];
	gets(a);
	gets(b);
	fun(a, b);
	return 0;
}

在这里插入图片描述

26. 有一分数序列:1/2,1/4,1/6,1/8……,用函数调用的方法,求此数列前 20项的和。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
double fun(int n) {
	if (n == 1) return 1.0 / 2.0;
	return (fun(n - 1) + 1.0 / 2.0 / n);
}

int main()
{
	int n;
	scanf("%d", &n);
	double sum = 0;
	sum=fun(n);
	printf("前%d项的和为%.2f\n", n, sum);
	return 0;
}

在这里插入图片描述

27. 已知一个单向链表的头,请写出删除其某一个结点的算法,要求,先找到此结点,然后删除。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct LNode {
	int data;
	struct LNode* next;
}LNode,*LinkList;

void ListHeadInsert(LinkList* L) {
	LNode* s;
	int x;
	while (scanf("%d", &x) != EOF) {
		s = (LNode*)malloc(sizeof(LNode));
		memset(s, 0, sizeof(LNode));
		s->data = x;
		if ((*L)->next == NULL)
			(*L)->next = s;
		else
		{
			s->next = (*L)->next;
			(*L)->next = s;
		}
	}
}

void ListDelete(LinkList* L, int x) {
	LNode* pre = *L;
	LNode* p = (*L)->next;
	while (p)
	{
		if (p->data == x) {
			pre->next = p->next;
			free(p);
			p = NULL;
			return;
		}
		pre = p;
		p = p->next;
	}
	printf("没找到%d\n", x);
}

void printList(LinkList L) {
	L = L->next;
	while (L) {
		printf("%d ", L->data);
		L = L->next;
	}
	printf("\n");
}

int main()
{
	LinkList L;
	L = (LNode*)malloc(sizeof(LNode));
	memset(L, 0, sizeof(LNode));
	ListHeadInsert(&L);
	int x;
	scanf("%d", &x);
	ListDelete(&L, x);
	printList(L);
	return 0;
}

在这里插入图片描述

28. 用冒泡法对 10 个整数排序。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>

//从小到大有序排列
void bubbleSort(int a[]) {
	for (int j = 0; j < 9; j++) {
		bool flag = false;
		for (int i = 0; i < 9; i++) {
			if (a[i] > a[i + 1]) {
				int t = a[i];
				a[i] = a[i + 1];
				a[i + 1] = t;
				flag = true;
			}
		}//fori
		if (flag == false)break;
	}//forj
}
int main() {
	int a[10];
	for (int i = 0; i < 10; i++) {
		scanf("%d", &a[i]);
	}
	bubbleSort(a);
	for (int i = 0; i < 10; i++) {
		printf("%d ", a[i]);
	}
	return 0;
}

在这里插入图片描述

29. 有一个 16 位的整数,每 4 位为一个数,写函数求他们的和。比如:

整数 1101010110110111(十进制为 54711),和 1101+0101+1011+0111(十进制
为 36)
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void sumNum(int a) {
	int sum = 0;
	while (a) {
		sum += a & 15;
		a = a >> 4;
	}
	printf("%d", sum);
}
int main()
{
	int a = 0B1101010110110111;
	sumNum(a);
	return 0;
}

在这里插入图片描述

30. 设编号为 1,2,… n 的 n 个人围坐一圈,约定编号为 k(1<=k<=n)的人从

1 开始报数,数到 m 的那个人出列,它的下一位又从 1 开始报数,数到 m 的那个
人又出列,依次类推,直到所有人出列为止,由此产生一个出队编号的序列。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct LNode {
	int data;
	struct LNode* next;
}LNode,*LinkList;

void ListHeadInsert(LinkList* Head, LinkList* Tail) {
	LNode* p;
	int x;
	while (scanf("%d", &x) != EOF) {
		p = (LNode*)malloc(sizeof(LNode));
		memset(p, 0, sizeof(LNode));
		p->data = x;
		if (*Head == NULL) {
			*Head = *Tail = p;
			p->next = p;
		}
		else {
			(*Tail)->next = p;
			p->next = *Head;
			*Tail = p;
		}
	}
}

void ListDelete(LinkList* Head, LinkList* Tail, int k, int m) {
	LNode* pre = *Tail;
	LNode* p = *Head;
	int K = k - 1;
	while (K) {
		K--;
		pre = p;
		p = p->next;
	}
	while (p != NULL) {
		int M = m - 1;
		while (M) {
			M--;
			pre = p;
			p = p->next;
		}
		printf("%2d ", p->data);
		pre->next = p->next;
		free(p);
		if (p == pre)
			pre = p = NULL;
		else
			p = pre->next;
	}
	*Tail = *Head = NULL;
}


int main()
{
	LinkList head = NULL;
	LinkList tail = NULL;
	ListHeadInsert(&head, &tail);
	int k, m;
	scanf("%d%d", &k, &m);
	ListDelete(&head, &tail, k, m);
	return 0;
}

在这里插入图片描述

31. 声明一个类 String,其数据成员为 char head[100],构造函数 String(char *Head)实现 head 的初始化,成员函数 void reverse()

实现 head 内字符串的 逆序存放,成员函数 void print()实现 head 内字符串的输出。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<string>
#include<iostream>
using namespace std;
class String;
class String 
{
public: 
	String(char* Head)
	{
		strcpy(head, Head);
	}
	void reverse()
	{
		int len = strlen(head);
		for (int i = 0; i < len / 2; ++i)
		{
			swap(head[i], head[len - 1 - i]);
		}
	}
	void print()
	{
		int len = strlen(head);
		for (int i = 0; i < len; ++i)
		{
			cout << head[i];
		}
		cout << endl;
	}
	char head[100];
};
int main()
{
	char n[100] = "qwerasdf";
	char* m = n;
	String s(m);
	s.print();
	s.reverse();
	s.print();
	return 0;
}

在这里插入图片描述

32. 定义盒子 Box 类,要求具有以下成员:可设置盒子形状;

可计算盒子体积;可计算盒子的表面积。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class Box;
class Box {
public:
	Box() {
		high = wide = long2 = 0;
	}
	void setShape(int l, int w, int h)
	{
		high = h;
		wide = w;
		long2 = l;
	}
	int square()
	{
		int s = (high * wide + high * long2 + wide * long2) * 2;
		return s;
	}
	int volume()
	{
		int v = high * wide * long2;
		return v;
	}
	int high, wide, long2;
};

int main()
{
	Box a;
	a.setShape(6, 5, 8);//看似长宽高,实际三个数互不影响
	cout << "表面积=" << a.square() <<
		"体积=" << a.volume() << endl;
	return 0;
}

在这里插入图片描述

33. 声明一个 Tree(树)类,有成员 ages(树龄),成员函数 grow(int years)用

以对 ages 加上 years,showAge()用以显示 tree 对象的 ages 值。在主函数中定义 Tree 类对象,并调用成员函数(自行指定实参数据)。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
class Tree;

int main()
{
	class Tree {
	public:
		Tree() {
			ages = 0;
		}
		int grow(int year) {
			ages += year;
			return ages;
		}
		void showAge() {
			cout << "树的年龄是" << ages << "年" << endl;
		}
		int ages;
	};
	Tree a;
	a.ages = 10;
	a.grow(20);
	a.showAge();
	a.grow(200);
	a.showAge();
	return 0;
}

在这里插入图片描述


34. 有一个学生类 Student,包括学生姓名、成绩,设计一个友元函数,

输出成绩对应的等级:
(1) 大于等于 90:优;
(2) 80~90:良;
(3) 70~79:中;
(4) 60~69:及格;
(5) 小于 60:不及格。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;

class Student
{
	friend void gradeLevel(Student &s);
public:
	Student()
	{
		name = "";
		grade = 0;
	}
	void setGrade(int grade2)
	{
		grade = grade2;
	}
private:
	string name;
	int grade;
};
void gradeLevel(Student &s) {
	if (s.grade >= 90)
		cout <<s.grade<<" " << "优" << endl;
	else if (s.grade >= 80 && s.grade < 90)
		cout << s.grade << " " << "良" << endl;
	else if (s.grade >= 70 && s.grade < 80)
		cout << s.grade << " " << "中" << endl;
	else if (s.grade >= 60 && s.grade < 70)
		cout << s.grade << " " << "及格" << endl;
	else
		cout << s.grade << " " << "不及格" << endl;
}


int main()
{
	Student a;
	a.setGrade(100);
	gradeLevel(a);
	a.setGrade(59);
	gradeLevel(a);
	a.setGrade(69);
	gradeLevel(a);
	a.setGrade(79);
	gradeLevel(a);
	a.setGrade(80);
	gradeLevel(a);
	return 0;
}

在这里插入图片描述


35. 定义一个复数类,用友元函数实现对双目运算符“+”的运算符重载,使其适用于复数运算。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

class ComplexNumber {
	friend ComplexNumber operator+(ComplexNumber& p1, ComplexNumber& p2);
	//运算符重载的基本格式
	//返回值类型 类名::operator重载的运算符(参数表)
	//{
	//	……
	//}
	//operator是关键字,它与重载的运算符一起构成函数名。
public:
	void set(int a, int b)
	{
		A = a;
		B = b;
	}
	void show()
	{
		cout << A << "+" << B << "i" << endl;
	}
private:
	int A;
	int B;
};

ComplexNumber operator+(ComplexNumber& p1, ComplexNumber& p2)
{
	ComplexNumber p;
	p.A = p1.A + p2.A;
	p.B = p1.B + p2.B;
	return p;
}

int main()
{
	ComplexNumber p1, p2;
	p1.set(1, 6);
	p1.show();
	p2.set(2, 5);
	p2.show();
	p1 = p1 + p2;
	p1.show();
	return 0;
}

在这里插入图片描述


36. 有一个 Time 类,包含数据成员 minute(分)和 sec(秒),模拟秒表,每次走

一秒,满 60 秒进一分钟,此时秒又从 0 开始算。要求输出分和秒的值。(提示:
重载单目运算符++)。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

class Time {
public:
	Time()
	{
		minute = 0;
		sec = 0;
	}
	Time& operator++()
	{
		this->sec++;
		if (sec == 60) {
			minute++;
			sec = 0;
		}
		return *this;
	}
	Time operator++(int)
	{
		Time t;
		t = *this;
		this->sec++;
		if (sec == 60)
		{
			minute++;
			sec = 0;
		}
		return t;
	}
	void show() {
		cout << minute << "minute " << sec << "sec" << endl;
	}

	int minute;
	int sec;
};

int main()
{
	Time t2;
	for (int i = 0; i < 90; i++)
	{
		++t2;
		t2.show();
		
	}
	return 0;
}

在这里插入图片描述


37. 设计一个三角形类 Triangle,包含三角形三条边长的私有数据成员,另有

一个重载运算符“+”,以实现求两个三角形对象的面积之和。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cmath>
using namespace std;
class Triangle {
	friend double operator+(Triangle& p1, Triangle& p2);
public:
	Triangle() {
		a = 0;
		b = 0;
		c = 0;
	}
	void setTriangle(double a2,double b2,double c2)
	{
		a = a2;
		b = b2;
		c = c2;
	}
	double square() {
		double p = (a + b + c) / 2;
		double s = sqrt(p*(p-a)*(p-b)*(p-c));
		return s;
	}
private:
	double a, b, c;
};
double operator+(Triangle& p1, Triangle& p2)
{
	double S;
	S=p1.square() + p2.square();
	return S;
}

int main()
{
	Triangle p1, p2;
	p1.setTriangle(3.0, 4.0, 5.0);
	p2.setTriangle(6.0, 8.0, 10.0);
	cout << p1.square() << endl;
	cout << p2.square() << endl;
	cout << p1 + p2 << endl;
	return 0;
}

在这里插入图片描述

38. 使用函数重载的方法定义两个重名函数,分别求出整型数的两数之和和浮点数的两数之和,并在主函数中调用。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

void myAdd(int a, int b)
{
	cout << a + b << endl;
}

void myAdd(double a, double b)
{
	cout << a + b << endl;
}
int main()
{
	int a = 2, b = 3;
	double x = 2.2, y = 3.3;
	myAdd(a, b);
	myAdd(x, y);
	return 0;
}

在这里插入图片描述


39. 定义一个抽象类 Shape 用以计算面积,从中派生出计算长方形、梯形、圆形面积的派生类。

程序中通过基类指针来调用派生类中的虚函数,计算不同形状的面积。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#define PI 3.14
using namespace std;

class Shape
{
public:
	virtual void square() {};
};

class Rectangle :public Shape
{
public:
	Rectangle(int a, int b) {
		L = a;
		W = b;
	}
	virtual void square()
	{
		int s = L * W;
		cout << "长方形面积" << s << endl;
	}
	int L, W;
};

class Trapezoid :public Shape
{
public:
	Trapezoid(int a, int b, int c)
	{
		L1 = a;
		L2 = b;
		H = c;
	}
	virtual void square()
	{
		int s = (L1 + L2) * H / 2;
		cout << "梯形面积" << s << endl;
	}
	int L1, L2, H;
};

class Circle :public Shape
{
public:
	Circle(double r)
	{
		R = r;
	}
	virtual void square()
	{
		double s = PI * R * R;
		cout << "圆形面积" << s << endl;
	}
	double R;
};

int main()
{
	Rectangle chang(2, 6);
	Shape* s1 = &chang;
	s1->square();

	Trapezoid ti(2, 6, 4);
	Shape* s2 = &ti;
	s2->square();

	Circle yuan(5);
	Shape* s3 = &yuan;
	s3->square();

	return 0;
}

在这里插入图片描述

代码如下(示例):


40. 定义计数器类 Counter。要求具有以下成员:计数器值;可进行增值和减值记数;可提供记数值。

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;

class Counter
{
public:
	Counter()
	{
		count = 0;
	}
	Counter(int c) {
		count = c;
	}
	void show()
	{
		cout << count << endl;
	}
	Counter& operator++()
	{
		this->count++;
		return *this;
	}
	Counter& operator--()
	{
		this->count--;
		return *this;
	}
private:
	int count;
};

int main()
{
	Counter c(10);
	++c;
	c.show();
	--c;
	--c;
	c.show();
	return 0;
}

在这里插入图片描述


41. 声明一个哺乳动物 Mammal 类,再由此派生出狗 Dog 类,二者都定义 speak( )

成员函数,基类中定义为虚函数。声明一个 Dog 类的对象,调用 speak()函数,
观察运行结果。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
using namespace std;
class Mammal
{
public:
	virtual void speak()
	{
		cout << "Mammal" << endl;
	}
};

class Dog :public Mammal
{
public:
	void speak()
	{
		cout << "Dog" << endl;
	}
};

int main()
{
	Dog dog2;
	dog2.speak();//dog赋值
	Mammal* animal = &dog2;
	(*animal).speak();//dog指针
	Mammal& animal2 = dog2;
	animal2.speak();//dog引用
	Mammal animal3 = dog2;
	animal3.speak();//Mammal
	return 0;
}

在这里插入图片描述

42. 编写一个程序计算“三角形、正方形、圆形”三种图形的面积,要求:

a) 抽象出一个基类 Base;
b) 在其中说明一个虚函数用来求面积;
c) 利用派生类定义“三角形、正方形、圆形”;
d) 编写主函数并测试。
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<cmath>
#define PI 3.14
using namespace std;
class Base
{
public:
	virtual void square2() {}
};

class Square :public Base
{
public:
	Square(int a)
	{
		L = a;
	}
	virtual void square2()
	{
		int s = L * L;
		cout << "正方形面积" << s << endl;
	}
	int L;
};
class Triangle :public Base
{
public:
	Triangle(double a, double b, double c)
	{
		A = a, B = b, C = c;
	}
	virtual void square2()
	{
		double s, p;
		p = (this->A + this->B + this->C) / 2;
		s = sqrt(p * (p - this->A) * (p - this->B) * (p - this->C));
		cout << "三角形面积" << s << endl;
	}
	double A, B, C;
};
class Circle :public Base
{
public:
	Circle(double r)
	{
		R = r;
	}
	virtual void square2()
	{
		double s = PI * R * R;
		cout << "圆的面积" << s << endl;
	}
	double R;
};

int main()
{
	Square s(2);
	Base* s1 = &s;
	s1->square2();

	Triangle t(3, 4, 5);
	Base* s2 = &t;
	s2->square2();

	Circle c(3);
	Base* s3 = &c;
	s3->square2();

	return 0;
}

在这里插入图片描述


43. 编写一段程序,从标准输入中一次读入一整行,存入 std::string 中,然后

修改该程序,使其一次读入一个词。(练习 3.2)
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
	string line;
	getline(cin, line);
	for (auto &c : line) {
		if (ispunct(c)) {
			c = '\0';
		}
	}
	cout << line << endl;
	return 0;
}

在这里插入图片描述

44. 请说明std::string类的输入运算符和getline函数分别是如何处理空白字符的。(练习 3.3)

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
	string s;
	cin >> s;//忽略空白字符(空格符、换行符、制表符等)
	cout << s << endl;
	string str;
	getline(cin,str);//保留空白符,函数把所读内容存到str中,
	//直到遇到换行字符(换行字符也被读进来了)
	//然后把所读内容存到str中,注意不存换行符
	cout << str << endl;
}//输入【"qwe空格"空格*asd空格L空格空格*换行符】

在这里插入图片描述

45. 编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接

成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。(练
习 3.5)
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
	string word;
	string sum;
	while (cin>>word) {
		//sum += word;
		sum = sum+" "+word;
		
	}
	cout << sum << endl;
	return 0;
}

在这里插入图片描述


46. 编写一段程序,读入一个包含标点符号的字符串,将标点符号去除后输出字符串剩余的部分。(练习 3.10)

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
using std::string;
using std::vector;
using std::cin;
using std::cout;
using std::endl;
int main()
{
	string line;
	getline(cin, line);
	for (auto &c : line) {
		if (ispunct(c)) {
			c = '\0';
		}
	}
	cout << line << endl;
	return 0;
}

在这里插入图片描述


47. 编写一段程序,创建一个含有 10 个整数的 vector 对象,然后使用迭代器将 所有元素的值都变成原来的两倍。输出 vector 对象的内容,检验程序是否正确。(练习 3.23)

代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<string>
#include<vector>
using namespace std;
int main()
{
	vector<int> v1{ 1,2,3,4,5,6,7,8,9,12 };
	for (auto it = v1.begin();
		it != v1.end(); ++it) {
		*it *= 2;
		cout << *it << endl;
	}
}

在这里插入图片描述

48. 编写一段程序,比较两个 std::string 对象。

再编写一段程序,比较两个 C 风格字符串的内容。(练习 3.39)
代码如下(示例):

#define _CRT_SECURE_NO_WARNINGS 1
#include<cstring>
#include<iostream>
#include<string>
using namespace std;
int main()
{
	string s1 = "A string example";
	string s2 = "A different string";
	if (s1 < s2)
		cout << "s1<s2" << endl;
	else if (s1 > s2)
		cout << "s1>s2" << endl;
	else
		cout << "s1==s2" << endl;

	const char ca1[] = "A different string";
	const char ca2[] = "A string example";
	int res = strcmp(ca1, ca2);
	if (res > 0)
		cout << "ca1>ca2" << endl;
	else if (res < 0)
		cout << "ca1<ca2" << endl;
	else
		cout << "ca1==ca2" << endl;
	return 0;
}

在这里插入图片描述

总结

回溯算法
头插法建立链表
do{
}while();
友元函数friend
a&15,a>>4
this->A//this,->
virtual void square2()

  • 26
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值