C语言 不使用C语言提供的字符串函数,编写函数fun(char*a),其功能是将字符中的前导*号全部删除,中间和尾部的*号不能删除。例如,字符串中的内容为:****A*BC*DF*G*******,删除后,字符串中的内容是:A*BC*DF*G*******。
时间: 2024-03-30 21:32:24 浏览: 22
你可以使用以下代码来实现这个功能:
```c
#include <stdio.h>
void fun(char* a) {
int i = 0;
int j = 0;
int flag = 0; // 标记是否已经遇到非*字符
// 遍历字符串,将前导*号删除
while (a[i] ! '\0') {
if (a[i] == '*' && flag == 0) {
i++;
} else {
flag = 1;
a[j++] = a[i++];
}
}
// 在字符串末尾添加结束符
a[j] = '\0';
}
int main() {
char str[] = "****A*BC*DF*G*******";
printf("原始字符串:%s\n", str);
fun(str);
printf("删除前导*号后的字符串:%s\n", str);
return 0;
}
```
运行结果为:
```
原始字符串:****A*BC*DF*G*******
删除前导*号后的字符串:A*BC*DF*G*******
```
相关问题
C语言编写一个函数fun(char* s),该函数的功能是把字符串中的内容逆置
你可以使用指针来实现字符串的内容逆置。以下是一个用C语言编写的函数`fun`的示例代码:
```c
#include <stdio.h>
#include <string.h>
void fun(char* s) {
int length = strlen(s);
char* start = s;
char* end = s + length - 1;
while (start < end) {
char temp = *start;
*start = *end;
*end = temp;
start++;
end--;
}
}
int main() {
char str[] = "Hello, World!";
printf("原始字符串:%s\n", str);
fun(str);
printf("逆置后的字符串:%s\n", str);
return 0;
}
```
在这个示例中,函数`fun`接受一个字符指针`s`作为参数,代表要逆置的字符串。首先,使用`strlen`函数获取字符串的长度。然后,使用两个指针`start`和`end`分别指向字符串的首尾字符。通过交换`start`和`end`指向的字符,并且让`start`指针向后移动,`end`指针向前移动,直到`start`指针不再小于`end`指针为止,完成字符串内容的逆置。
在`main`函数中,我们定义了一个字符串`str`,并将其作为参数传递给函数`fun`进行逆置。最后,打印逆置后的字符串结果。
运行上述代码,输出结果如下:
```
原始字符串:Hello, World!
逆置后的字符串:!dlroW ,olleH
```
希望能帮助到你!如有任何疑问,请随时提问。
用C语言编写函数将字符串中的前导*号全部移到字符串的尾部,程序包含指针
好的,可以使用指针实现该函数。下面是一个示例代码:
```c
#include <stdio.h>
void move_star(char *str) {
char *p = str;
char *q = str;
while (*p) {
if (*p != '*') {
*q++ = *p;
}
p++;
}
while (*q) {
*q++ = '*';
}
}
int main() {
char str[] = "***hello*world**";
printf("Original string: %s\n", str);
move_star(str);
printf("Modified string: %s\n", str);
return 0;
}
```
该函数的实现思路是:使用两个指针p和q,初始都指向字符串的首字符。遍历整个字符串,如果p指向的字符不是星号,则将其移动到q指向的位置,并将q向后移动一个位置;否则只将p向后移动一个位置。最后,将q指向的位置及其后面的所有字符都改为星号即可。
注意,此处的字符串是以字符数组的形式传递给函数的,因此需要在函数内部修改该字符数组。如果需要修改传入的字符串,可以将函数参数改为指向字符数组的指针。