运用指针,假定输入的字符串中只包含字母和+*+号。请编写函数+fun+,它的功能是:将字符串中的前导+*+号全部移到字符串的+尾部。+例如,字符串中的内容为*******A*BC*DEF*G****
时间: 2023-12-06 19:02:43 浏览: 132
以下是C语言的实现,使用指针将前导*号移到字符串尾部:
```c
#include <stdio.h>
#include <string.h>
void fun(char *str) {
if (str == NULL) {
printf("data is error\n");
return;
}
int len = strlen(str);
char *p = str;
int count = 0;
while (*p == '*') { // 统计前导*号的个数
count++;
p++;
}
for (int i = 0; i < len - count; i++) { // 将非*号字符移到字符串前面
str[i] = str[i + count];
}
for (int i = len - count; i < len; i++) { // 将前导*号移到字符串尾部
str[i] = '*';
}
str[len] = '\0'; // 字符串结尾
}
int main() {
char str[] = "*******A*BC*DEF*G****";
fun(str);
printf("str is %s\n", str); // 输出:str is ABCDEFG*******
return 0;
}
```
相关问题
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是: 除了字符串前导和尾部的*号之外,将串中其它*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:****A*BC*DEF*G********,删除后,字符串中的内容应当是:****ABCDEFG********。在编写函数时,不得使用C语言提供的字符串函数。
好的,这是一个比较简单的字符串处理题目。我们可以使用两个指针,一个指向字符串的头部,一个指向字符串的尾部,然后分别向中间移动指针,遇到*号就跳过,遇到字母就将其复制到前面的位置。具体实现可以参考下面的代码:
```c
void fun(char *h, char *p) {
char *src = h;
char *dst = h;
while (*src == '*') { // 跳过开头的*
src++;
}
while (p > src && *p == '*') { // 跳过结尾的*
p--;
}
while (src <= p) { // 复制非*号的字符
if (*src != '*') {
*dst = *src;
dst++;
}
src++;
}
while (dst <= p) { // 将剩余的位置填充*
*dst = '*';
dst++;
}
}
```
这个函数的思路比较简单,首先跳过字符串头部和尾部的*号,然后将指针src从头部向尾部移动,遇到非*号的字符就复制到指针dst所指的位置。最后,将剩余的位置填充*号即可。
假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除字符串中所有的*号。在编写函数时,使用C语言程序。 例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容应当是:ABCDEFG。
好的,我来编写一个满足要求的C语言函数fun:
```c
void fun(char* s) {
char* p = s;
while (*p != '\0') {
if (*p != '*') {
*s = *p;
s++;
}
p++;
}
*s = '\0';
}
```
这个函数接收一个指向字符串的指针s作为输入,直接在原字符串上进行修改。
函数通过遍历输入字符串s的每一个字符,如果该字符不是*号,则将其复制到原字符串的当前位置,并将指针s后移一位。最后在原字符串的末尾添加一个结束符'\0'即可。
示例调用代码如下:
```c
char s[] = "****A*BC*DEF*G*******";
fun(s);
printf("%s\n", s); // 输出:ABCDEFG
```
阅读全文
相关推荐














