C语言编写程序要求字符数组中只有字母和*,将所有的*移动到数组的后面。例如:a数组中存放a**b*C*字符串,处理完以后a中为abC*****。
时间: 2024-05-15 22:10:15 浏览: 109
这个问题可以用双指针的方法来解决。我们可以定义两个指针,一个指向字符数组的开头,一个指向字符数组的末尾。然后从前往后遍历字符数组,如果遇到字母就将它赋值给指针1所指向的位置,并将指针1向后移动一位;如果遇到*号就将它赋值给指针2所指向的位置,并将指针2向前移动一位。当指针1和指针2相遇时,遍历结束。此时所有的字母都已经放到了数组的前面,所有的*号都已经放到了数组的后面。
以下是C语言的示例代码实现:
```c
#include <stdio.h>
#include <string.h>
void move_star_to_end(char* str) {
int len = strlen(str);
int i = 0, j = len - 1;
while (i < j) {
if (str[i] == '*') {
char temp = str[i];
str[i] = str[j];
str[j] = temp;
j--;
} else {
i++;
}
}
}
int main() {
char str[] = "a**b*C*";
move_star_to_end(str);
printf("%s\n", str);
return 0;
}
```
相关问题
一个顺序表中存放字符(只有数字字符和英文字符),编写算法删除所有的数字字符,顺序表的长度和内容已知(即自己编程时直接指定)。C语言
在C语言中,为了删除顺序表(数组)中的所有数字字符,可以遍历整个数组,对于每个元素,检查是否是非字母字符,如果是则跳过,否则将其移除并调整后续元素的位置。这里是一个简单的示例算法:
```c
#include <stdio.h>
// 函数声明,用于处理单个字符
int is_alpha(char c);
void delete_digits(char *arr, int len) {
if (len == 0) return; // 如果列表为空,直接返回
int i = 0, j = 0;
while (i < len) { // 遍历数组
if (!is_alpha(arr[i])) { // 检查字符是否为非字母
arr[j++] = arr[i]; // 如果不是,将它复制到新位置
}
i++; // 移动指针
}
arr[j] = '\0'; // 结束字符串(如果删除了最后一个元素)
printf("处理后的数组: ");
for (i = 0; i < j; i++) {
printf("%c", arr[i]); // 打印结果
}
}
// 辅助函数,判断字符是否为字母
int is_alpha(char c) {
if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')) {
return 1;
} else {
return 0;
}
}
int main() {
char list[] = "Hello123World456"; // 示例输入
int length = sizeof(list) / sizeof(list[0]);
delete_digits(list, length);
return 0;
}
```
运行上述程序,输出将是只包含字母的序列:"Helloorld"。
使用c语言编写上述问题
在C语言中,我们可以使用数组和指针来解决这个问题,首先创建一个包含字母A到Z的数组,然后遍历输入的字符串并根据规则进行转换。这里是一个基本的示例:
```c
#include <stdio.h>
#include <string.h>
// 将字母移动三位的函数
char shift(char c) {
if (c >= 'a' && c <= 'z') {
return ((c - 'a' + 3) % 26) + 'a';
} else if (c >= 'A' && c <= 'Z') {
return ((c - 'A' + 3) % 26) + 'A';
}
return c; // 留给非字母字符不变
}
int main() {
char encrypted[] = "djkl;hgfedcba";
int len = strlen(encrypted);
// 创建一个新的字符串来存放解密后的结果
char decrypted[len];
for (int i = 0; i < len; i++) {
decrypted[i] = shift(encrypted[i]);
}
printf("解密后的信息: %s\n", decrypted);
return 0;
}
```
这段代码会输出解密后的信息。请注意,对于现代的C语言项目,可能会使用更高级的数据结构和库函数来简化任务,但以上代码展示了基本的思路。
阅读全文