C语言假定输入的字符串中只包含字母和*号。请编写程序:将字符串中的前导*号全部删除,中间和后面的*号不删除。例如,若字符串中的内容为****A*BC*DEF*G*******,删除后,字符串中的内容则应当是A*BC*DEF*G*******。 DEV C++
时间: 2023-11-25 18:49:35 浏览: 49
以下是C语言实现的代码,可以将字符串中的前导*号全部删除,中间和后面的*号不删除:
```c
#include <stdio.h>
#include <string.h>
void deleteLeadingStars(char str[]) {
int i, j, len;
len = strlen(str);
j = 0;
for (i = 0; i < len; i++) {
if (str[i] != '*') {
break;
}
j++;
}
for (i = 0; i < len - j; i++) {
str[i] = str[i + j];
}
str[i] = '\0';
}
int main() {
char str[100];
printf("请输入字符串:");
scanf("%s", str);
deleteLeadingStars(str);
printf("删除前导*号后的字符串为:%s\n", str);
return 0;
}
```
相关问题
c语言写假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是将字符串中的前导*号全部移到字符串的尾部。
以下是实现该功能的C语言代码:
```c
void fun(char *str) {
int len = strlen(str);
int i, j;
// 计算前导*号的数量
int count = 0;
for (i = 0; i < len; i++) {
if (str[i] == '*') {
count++;
} else {
break;
}
}
// 移动前导*号到字符串尾部
for (i = 0, j = count; j < len; i++, j++) {
str[i] = str[j];
}
for (i = len - count; i < len; i++) {
str[i] = '*';
}
}
```
该函数的思路是先计算前导*号的数量,然后将非*号字符向前移动,最后将前导*号移到字符串尾部。注意要使用字符串的长度来遍历字符串。
用c语言编写程序做答,假定输入的字符串中只包含字母和*号,将字符串的前导*号全部移到字符串的尾部,字符串中间的*不需要改变位置。 例如:通过键盘输入***abcd**efg*,程序执行后输出:abcd**efg****
以下是可行的 C 语言程序代码:
```
#include<stdio.h>
#include<string.h>
void move_asterisks(char* str)
{
int len = strlen(str);
int count = 0;
for(int i = 0; i < len; i++)
{
if(str[i] == '*')
count++;
else
str[i-count] = str[i];
}
for(int i = len - count; i < len; i++)
str[i] = '*';
}
int main()
{
char str[100];
printf("Please input the string: ");
gets(str);
move_asterisks(str);
printf("After moving: %s\n", str);
return 0;
}
```
代码解析:
首先通过 `gets()` 函数获取输入的字符串。然后定义一个 `move_asterisks()` 函数,它的作用是把字符串中所有前导的 `*` 移动到字符串的末尾。我们定义字符串的有效长度为 `len`,定义一个计数器 `count` 来统计前导的 `*` 的个数。对于字符串中的每个字符,如果它是 `*`,则让计数器 `count` 自增;否则,就将它向前移动 `count` 个位置,这样就把前导的 `*` 删除掉了。最后,再在字符串的有效部分之后添加 `count` 个 `*` 即可。在主函数中调用这个函数并输出结果。这样,我们就成功地完成了这道题目的求解。