鱼C论坛

 找回密码
 立即注册
查看: 1163|回复: 2

[已解决]CC语习题

[复制链接]
发表于 2023-8-13 17:42:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
题目:规定输入的字符串中只包含字母和*号。请编写函数fun,其功能
      是:除了字符串前导的*号之外,将串中其它*号全部删除。
      在编写函数时,不得使用C语言提供的字符串函数。

例如:字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内容
      应当是:****ABCDEFG。

注意:请勿改动主函数main和其它函数中的任何内容
在    /**********Program**********/
               
    /**********  End  **********/中补充完整

#include <stdio.h>
void  fun( char *a )
{
        /**********Program**********/
               

        /**********  End  **********/
}

main()
{  
        char  s[81];
        printf("Enter a string:\n");
        gets(s);
        fun( s );
        printf("The string after deleted:\n");
        puts(s);
      
}
最佳答案
2023-8-13 17:42:41
#include <stdio.h>

void fun(char *a) {
    int leadingAsterisks = 0;
    int i;

    // 计算字符串前导的*号个数
    for (i = 0; a[ i] == '*'; i++) {
        leadingAsterisks++;
    }

    // 将非前导的*号删除
    int j = leadingAsterisks;
    while (a[ i] != '\0') {
        if (a[ i] != '*') {
            a[j++] = a[ i];
        }
        i++;
    }
    a[j] = '\0'; // 添加字符串结束符
}

int main() {
    char s[81];
    printf("Enter a string:\n");
    gets(s);
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
    return 0;
}
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-13 17:42:34 | 显示全部楼层
题目要求编写一个函数fun,功能是删除字符串中除了字符串前导的*号之外的所有*号。

我们可以使用两个指针来解决这个问题。一个指针用于遍历字符串,另一个指针用于记录删除*号后的字符串。

具体实现如下:
void fun(char *a) {
    char *p = a;  // 遍历指针
    char *q = a;  // 记录删除*号后的字符串指针

    // 跳过字符串前导的*号
    while (*p == '*') {
        p++;
    }

    // 遍历字符串
    while (*p != '\0') {
        if (*p != '*') {
            // 将非*号字符复制到删除*号后的字符串中
            *q = *p;
            q++;
        }
        p++;
    }

    // 在删除*号后的字符串末尾添加字符串结束符'\0'
    *q = '\0';
}

在主函数中,我们首先输入一个字符串,然后调用fun函数进行处理,最后输出删除*号后的字符串。
int main() {
    char s[81];
    printf("Enter a string:\n");
    gets(s);
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
    return 0;
}

这样就完成了对字符串中除了字符串前导的*号之外的所有*号的删除操作。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 17:42:41 | 显示全部楼层    本楼为最佳答案   
#include <stdio.h>

void fun(char *a) {
    int leadingAsterisks = 0;
    int i;

    // 计算字符串前导的*号个数
    for (i = 0; a[ i] == '*'; i++) {
        leadingAsterisks++;
    }

    // 将非前导的*号删除
    int j = leadingAsterisks;
    while (a[ i] != '\0') {
        if (a[ i] != '*') {
            a[j++] = a[ i];
        }
        i++;
    }
    a[j] = '\0'; // 添加字符串结束符
}

int main() {
    char s[81];
    printf("Enter a string:\n");
    gets(s);
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
    return 0;
}
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 08:40

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表