1)由用户输入一个长度不超过20的字符串,以回车结 束,并将其保存到字符数组中。将该宇符申中的数字 字符在字符数组中逆置,其它字符顾序保持不变后输 出。例如输入 “a12bc34d”,逆置后为 “a43bc21d” 要求接受
时间: 2024-03-07 17:47:51 浏览: 59
好的,我可以帮您解决这个问题。以下是 C++ 的代码实现:
```cpp
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[21]; // 定义字符数组,长度为 21,以容纳回车符
cin.getline(s, 21); // 读入字符串,包括空格,以回车结束
int len = strlen(s); // 计算字符串长度
int i = 0, j = len - 1; // 定义两个指针,分别指向字符串开头和结尾
while (i < j) { // 当指针没有相遇时
if (isdigit(s[i]) && isdigit(s[j])) { // 如果两个指针都指向数字字符
swap(s[i], s[j]); // 交换它们
i++; // 移动指针
j--;
}
else if (isdigit(s[i])) { // 如果只有左边的指针指向数字字符
j--; // 右指针左移一位
}
else { // 如果只有右边的指针指向数字字符,或两个指针都指向非数字字符
i++; // 左指针右移一位
}
}
cout << s << endl; // 输出逆置后的字符串
return 0;
}
```
代码解析:
1. 首先定义一个长度为 21 的字符数组 `s`,以容纳回车符;
2. 使用 `cin.getline()` 函数读入字符串,遇到回车即结束;
3. 使用 `strlen()` 函数计算字符串长度;
4. 定义两个指针 `i` 和 `j`,分别指向字符串的开头和结尾;
5. 使用 `while` 循环,当两个指针没有相遇时执行以下步骤:
1. 判断两个指针是否都指向数字字符,如果是,就交换它们,并移动指针;
2. 如果只有左边的指针指向数字字符,就将右指针左移一位;
3. 如果只有右边的指针指向数字字符,或者两个指针都指向非数字字符,就将左指针右移一位;
6. 循环结束后,输出逆置后的字符串。
需要注意的是,本题要求的是将数字字符逆置,其它字符的顺序保持不变。因此,在交换数字字符时,只有两个指针都指向数字字符时才进行交换;如果只有一个指针指向数字字符,那么就将另一个指针移动一位。
阅读全文