ZxZ. 发表于 2023-8-13 17:42:11

CC语习题

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

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

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

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

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

main()
{
      chars;
      printf("Enter a string:\n");
      gets(s);
      fun( s );
      printf("The string after deleted:\n");
      puts(s);
      
}

isdkz 发表于 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;
    printf("Enter a string:\n");
    gets(s);
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
    return 0;
}


这样就完成了对字符串中除了字符串前导的*号之外的所有*号的删除操作。

陶远航 发表于 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 = a[ i];
      }
      i++;
    }
    a = '\0'; // 添加字符串结束符
}

int main() {
    char s;
    printf("Enter a string:\n");
    gets(s);
    fun(s);
    printf("The string after deleted:\n");
    puts(s);
    return 0;
}
如果问题已经解决,请设置最佳答案
页: [1]
查看完整版本: CC语习题