C语言自定义函数有以下字符串:****A*BC*DEF****,删除字符串中间的星号,得到如下结果:****ABCDEF****
时间: 2023-06-13 10:07:15 浏览: 85
可以使用一个循环遍历字符串中的每一个字符,判断当前字符是否是星号,如果是,则判断前一个和后一个字符是否都不是星号,如果是,则将当前字符删除。可以使用字符串的指针来实现。
以下是示例代码:
```c
#include <stdio.h>
#include <string.h>
void removeStars(char *s)
{
int len = strlen(s);
char *p = s;
while (*p != '\0') {
if (*p == '*' && *(p-1) != '*' && *(p+1) != '*') {
memmove(p, p+1, len-(p-s));
len--;
} else {
p++;
}
}
}
int main()
{
char s[] = "****A*BC*DEF****";
removeStars(s);
printf("%s\n", s);
return 0;
}
```
输出结果为:
```
****ABCDEF****
```
相关问题
假定输入的字符串中只包含字母和*号。请编写函数 fun,它的功能是制除字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。例如,字符串中的内容为:****A*BC*DEF*G*******删除后,字符串中的内容应当是:ABCDEFG。
下面是一个C语言函数的实现,它会删除输入字符串中所有的星号(*)字符,且不使用任何标准库的字符串处理函数:
```c
#include <stdio.h>
void fun(char *str) {
int i, j;
// i用于遍历原始字符串,j用于记录不包含*的字符位置
for (i = 0, j = 0; str[i] != '\0'; ++i) {
if (str[i] != '*') {
// 将不包含*的字符移动到当前位置
str[j++] = str[i];
}
}
// 将字符串的终止符放在最后
str[j] = '\0';
}
int main() {
char str[] = "****A*BC*DEF*G*******";
printf("原始字符串: %s\n", str);
fun(str);
printf("删除*后: %s\n", str);
return 0;
}
```
解释:
- 我们定义了一个名为 `fun` 的函数,它接受一个指向字符数组(字符串)的指针 `str`。
- 使用两个指针 `i` 和 `j` 来遍历字符串。其中 `i` 用于遍历整个字符串,而 `j` 用于记录下一个不包含星号的字符应该放置的位置。
- 在遍历字符串的过程中,如果当前字符不是星号,我们就将其移动到 `j` 指向的位置,并且 `j` 递增。
- 如果当前字符是星号,我们不采取任何操作,继续遍历。
- 字符串遍历完成后,我们在 `j` 指向的位置放置字符串的终止符 `\0`,以确保字符串正确结束。
- 在 `main` 函数中,我们定义了一个测试字符串,并在调用 `fun` 函数前后打印字符串内容,以展示功能结果。
字符串中的内容为“****A*BC*DEF*G*******”,删除后,字符串中的内容应当是“A*BC*DEF*G”
以下是C语言的代码实现,可以删除字符串中的所有星号:
```c
#include <stdio.h>
void fun(char *s)
{
int i, j = 0;
for (i = 0; s[i] != '\0'; i++)
{
if (s[i] != '*')
{
s[j] = s[i];
j++;
}
}
s[j] = '\0';
}
```
使用该函数可以删除字符串中的所有星号,例如:
```c
char s[] = "****A*BC*DEF*G*******";
fun(s);
printf("%s", s); // 输出:A*BC*DEF*G
```
阅读全文