C++字符数组练习题及解答
本文档提供了五个C++字符数组练习题的解答,涵盖了字符串比较、字符串首尾互换、数字字符统计、字符串排序和删除指定字符等多个方面。这些问题可以帮助读者更好地掌握C++语言中的字符串处理和数组操作。
第 1 题:比较两个字符串的大小
问题:编写程序,比较两个字符串的大小,不允许使用 strcmp 函数。输入分 2 行,每一行均为字符串(不包含空格)。如果第一个字符串大于第二个字符串,则输出 1;如果两个字符串大小相等,则输出 0;如果第一个字符串小于第二个字符串,则输出 -1。
解答:
```cpp
#include<iostream.h>
int main() {
char a[100], b[100];
int t = 0, i;
cin >> a;
cin >> b;
for (i = 0; a[i] != 0 || b[i] != 0; i++) {
if (a[i] > b[i]) {
t = 1;
break;
}
if (a[i] < b[i]) {
t = -1;
break;
}
}
cout << t;
return 0;
}
```
这道题目考察的是字符串比较的基本操作,使用一个循环来比较两个字符串的每个字符,如果发现第一个字符串的字符大于第二个字符串的字符,则输出 1,如果小于则输出 -1,如果相等则继续比较下一个字符。
第 2 题:字符串首尾互换
问题:编写程序,将一个字符串首尾互换,并与原字符串连接后输出。输入字符串(不包含空格),输出处理后的结果。
解答:
```cpp
#include<iostream.h>
#include<string.h>
int main() {
char str1[100], i;
int n;
cin >> str1;
n = strlen(str1);
for (i = 0; i < n; i++) {
str1[n + i] = str1[n - i - 1];
}
for (i = 0; i < n * 2; i++) {
cout << str1[i];
}
return 0;
}
```
这道题目考察的是字符串操作的基本知识,使用一个循环来将字符串首尾互换,并与原字符串连接后输出。
第 3 题:数字字符统计
问题:编写程序,输入由数字字符构成的字符串,分别统计该字符串中数字字符对应的数字中奇数和偶数的个数。
解答:
```cpp
#include <string.h>
#include <iostream.h>
int main() {
int a[100], i, n, o, j;
char str[100];
o = 0;
j = 0;
cin >> str;
n = strlen(str);
for (i = 0; i < n; i++) {
a[i] = str[i] - 48;
if (a[i] % 2 == 0) {
o = o + 1;
} else {
j = j + 1;
}
}
cout << j << " " << o;
return 0;
}
```
这道题目考察的是字符串处理和数字操作的基本知识,使用一个循环来统计数字字符对应的数字中奇数和偶数的个数。
第 4 题:删除 ASCII 码值能被 3 整除的字符
问题:编写程序,输入字符串(不包含空格),删除字符串中 ASCII 码值能被 3 整除的字符,将剩余字符按从小到大排序后输出。
解答:
```cpp
#include<iostream.h>
#include<string.h>
int main() {
char str[100];
int n, i, j, t;
cin >> str;
n = strlen(str);
for (j = 0; j < n; j++) {
for (i = 0; i < n - 1 - j; i++) {
if (str[i] > str[i + 1]) {
t = str[i];
str[i] = str[i + 1];
str[i + 1] = t;
}
}
}
for (i = 0; i < n; i++) {
if (str[i] % 3 == 0)
continue;
else
cout << str[i];
}
return 0;
}
```
这道题目考察的是字符串处理和排序算法的基本知识,使用冒泡排序算法将剩余字符按从小到大排序后输出。
第 5 题:删除除前导和尾部以外的 * 字符
问题:编写程序,输入字符串(包含多个 '*'),删除所有除前导和尾部以外的 '*'。样例输入:*A*BC*DEF*G,样例输出:*ABCDEFG
解答:
```cpp
#include <iostream.h>
#include <stdio.h>
int main() {
char a[50], b[50];
gets(a);
int i, j = 0, k = 0, l = 0, c = 0;
for (i = 0;; i++) {
if (a[i] != '\0')
j++;
else
break;
}
for (i = 0; i < j; i++) {
if (a[i] == '*')
l++;
else
break;
}
for (i = j - 1; i >= 0; i--) {
if (a[i] == '*')
k++;
else
break;
}
for (c = 0; c < l; c++)
b[c] = '*';
for (i = l; i < j - k; i++) {
if (a[i] != '*') {
b[c] = a[i];
c++;
}
}
for (i = 0; i < k; i++) {
b[c] = '*';
c++;
}
for (i = 0; i < c; i++)
cout << b[i];
return 0;
}
```
这道题目考察的是字符串处理和字符操作的基本知识,使用一个循环来删除所有除前导和尾部以外的 '*' 字符。
这五道题目涵盖了字符串比较、字符串首尾互换、数字字符统计、字符串排序和删除指定字符等多个方面,旨在考察读者的字符串处理和数组操作能力。