在刚开始学习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;
}
大家好,我是Lucky_追梦仔。一个正在学习编程的小白,希望我的博文,可以帮助到您学习,或者解决您遇到的问题。