C++数组练习题(三)

我是计算机专业的一位大一本科生,C++小白,下面是我们学校在学习C++时用的基础练习题,我感觉这些题比较适合初学C++的码友,所以利用空闲时间将这些题整理出来,一是为了让初学C++的码友有所参考,二也是为了复习一下所学过知识。(因准备急促,如有代码错误,还请各位码友指正。)

1.回文字符串

从键盘输入n(n<100)个字符串(每个字符串长度不超过19),输出这组字符串中的回文字符串。其中判断一个字符串是否为回文字符串用函数实现。(回文串是指顺读和倒读都一样的一个字符串,如”level”、”abccba”都是回文串。)
输入格式:第一个为个数n,后续为n个字符串。
Sample Input
3 level abccba abbd
Sample Output
level abccba

#include<iostream>
#include<cstring>
using namespace std;
const int Max = 20;
bool f(char a[]);//当函数返回值为真或假时,应用布尔型
int main()
{
    
    
	int n, i;
	char a[Max];
	cin >> n;
	for (i = 0; i < n; i++)
	{
    
    
		cin >> a;
		if (f(a))
			cout << a << " ";
	}
	cout << endl;
	return 0;
}
bool f(char a[])
{
    
    
	int len = strlen(a),i;
	for (i = 0; i < len / 2; i++)
		if (a[i] != a[len - 1 - i])
			break;
	if (i == len / 2)
		return true;
	else
		return false;
}

2.字符串转换

在主函数中输入一个字符串(长度不超过99),存储在一个字符数组中,将该字符串中的大写字母变成相应的小写字母,小写字母变成相应的大写字母,其他字符不变,输出转换后的字符串。其中将字符串转换部分写成函数
Sample Input
ILoveLiaoNing23
Sample Output
ilOVElIAOnING23

#include<iostream>
#include<cstring>
using namespace std;
const int Max = 100;
void f(char a[]);
int main()
{
    
    
	char a[100];
	cin >> a;
	f(a);
	cout << a << endl;
	return 0;
}
void f(char a[])
{
    
    
	int len = strlen(a), i;
	for (i = 0; i < len; i++)
	{
    
    
		if (a[i] >= 'a' && a[i] <= 'z')
			a[i] -= 32;                    //'a'的ASCII码为97;'A'的ASCII码为65
		else if (a[i] >= 'A' && a[i] <= 'Z')
			a[i] += 32;
	}
}

3.字符串长度

输入n个(n<100)字符串,输出所有字符串长度的平均值。其中求一个字符串的长度用自定义函数实现
输入格式,第一个整数n为字符串个数,后续为n个字符串。
Sample Input
3 world hello C++
Sample Output
4.33333

#include<iostream>
using namespace std;
const int Max = 20;
int f(char a[]);
int main()
{
    
    
	char a[Max];
	int n, i;
	double s = 0;
	cin >> n;
	for (i = 0; i < n; i++)
	{
    
    
		cin >> a;
		s += f(a);
	}
	cout << s / n << endl;
	return 0;
}
int f(char a[])//自定义函数求字符串长度
{
    
    
	int n = 0;
	while (a[n])
		n++;
	return n;
}

4.字符串连接

编写串连接函数mystrcat(char a[],char b[]),即将第二个字符串接到第一个字符串的后面,函数返回连接后的字符串地址。从键盘输入两个字符串(字符串长度小于20),调用mystrcat函数实现字符串的连接,输出连接后和字符串。
Sample Input
University Science
Sample Output
UniversityScience

#include<iostream>
#include<cstring>
using namespace std;
const int Max = 20;
void mystrcat(char a[], char b[]);
int main()
{
    
    
	char a[Max], b[Max];
	cin >> a >> b;
	mystrcat(a, b);
	cout << a << endl;
	return 0;
}
void mystrcat(char a[], char b[])
{
    
    
	int len1 = strlen(a),
		len2 = strlen(b),
		i,j;
	for (i = len1, j = 0; i < len1 + len2, j < len2; i++, j++)
		a[i] = b[j];
	a[len1 + len2] = '\0';//字符数组以‘0’结尾
}

5.字符串比较

编写一个字符串比较函数mystrcmp,两个字符串相同时,函数返回0;两个字符不同时,函数返回第一个不同字符的ASCII码差值。如两个字符串ad和abc,第一个不同的字符时d和b,二者的差值为100-98=2,函数返回值为2。从键盘中输入两个字符串,调用mystrcmp进行函数比较,并输出比较后结果。
Sample Input
hello helloworld
Sample Output
-119

#include<iostream>
#include<cstring>
using namespace std;
const int Max = 20;
int mystrcmp(char a[], char b[]);
int main()
{
    
    
	char a[Max], b[Max];
	cin >> a >> b;
	cout << mystrcmp(a,b) << endl;
	return 0;
}
int mystrcmp(char a[], char b[])
{
    
    
	int len1 = strlen(a),
		len2 = strlen(b),
		n,i;
	if (len2 > len1)
		n = len2;
	else
		n = len1;
	for (i = 0; i < n; i++)
		if (a[i] != b[i])
			break;
	if (i == n)
		return 0;
	else
		return a[i] - b[i];
}

6.字符串处理

编写一个函数,实现在字符串的每两个字符之间都插入一个字符,如原串为abcd,插入字符为h则新串为ahbhchd。在主函数中输入原串及插入字符,调用该函数实现字符串转换,并输出转换后的新串。
Sample Input
hello w
Sample Output
hwewlwlwo

#include<iostream>
#include<cstring>
using namespace std;
const int Max = 20;
void f(char a[], char x);
int main()
{
    
    
	char a[Max], x;
	cin >> a >> x;
	f(a, x);
	cout << a << endl;
	return 0;
}
void f(char a[], char x)
{
    
    
	int len = strlen(a), i,j,pos,n;
	n = len;
	for (i = 1; i <n; i++)//长度为n的字符串,插入次数为n-1次
	{
    
    
		pos = (i-1) * 2 + 1;
		for (j = len - 1; j >= pos; j--)
			a[j + 1] = a[j];
		a[pos] = x;
		len++;
	}
	a[len] = '\0';
}

7.二进制转换

输入n 个(n<100)二进制整数,计算这n个二进制整数之和。要求:将二进制整数转换为十进制整数用函数实现,其中二进制数用字符串存储。提示:(1)二进制整数用字符串存储;
(2)11001的计算过程为:(((1*2+1)*2+0)*2+0)*2+1=25。
输入格式:第一个整数为个数n,后续为n个二进制正整数。
Sample Input
3 1010 11001 10101
Sample Output
56

#include<iostream>
#include<cstring>
using namespace std;
const int Max = 20;
int f(char a[]);
int main()
{
    
    
	char a[Max];
	int i,n,s=0;
	cin >> n;
	for (i = 0; i < n; i++)
	{
    
    
		cin >> a;
		s += f(a);
	}
	cout << s << endl;
	return 0;
}
int f(char a[])
{
    
    
	int len = strlen(a),
		s = 0,
		i;
	for (i = 0; i < len; i++)
		s = s * 2 + (a[i] - 48);//0的ASCII码为48
	return s;
}

上面7道题均为字符数组基础练习题。

猜你喜欢

转载自blog.csdn.net/Archie20/article/details/112395360