0524作业5道

文章包含几个C语言编程题目,涉及字符串逆序、整数转任意进制字符串、计算子串出现次数以及识别字符串中的特定帧。第一个函数反转字符串,第二个将整数转换为二进制,第三个计算子串在字符串中出现的次数,第四个颠倒单词顺序,最后一个识别以特定头尾标识符包围的帧。
摘要由CSDN通过智能技术生成
  • Training4:字符串训练

  • 题目: 请编写一个C函数,该函数将一个字符串逆序
    • 代码:
      #include <stdio.h>
      int main()
      {
          int count=0;
          char str[20];
          printf("请输入一串字符,以空格结束:\n");
          scanf("%s", str);
          printf("您输入的是:%s",str);
          printf("\n");
          for(int i = 0; i <20;i++) 
          {
              if(str[i] != '\0')
              {count++; }
              else
              break;
              
          }printf("倒过来是:");
          for(int i= count-1;i>=0; i--)
          {
              printf("%c",str[i]);
          }
          printf("\n");
          return 0;
      }

      结果:

  • 题目: 请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出
    • 代码:
      #include <stdio.h>
      void dtob(int n)
      {
          int a[2000];
          int i,j;
          for(i=0;n!=0;i++) 
          {
              a[i]=n%2;
              n=n/2;
          }
          for(j=i-1;j>=0;j--)
          {
              printf("%d", a[j]);
          }
      }
      int main()
      {
          void dtob(int n);
          int n;
          printf("请输入一个整数\n");
          scanf("%d", &n);
          printf("十进制:%d", n);
          printf("\n");
          printf("二进制:"); 
          dtob(n);
          printf("\n");
          printf("八进制:%o", n);
          printf("\n");
          printf("十六进制:%x", n);
          printf("\n");
          return 0;
      }

      结果:

  • 题目: 输入一个字符串,计算字符串中子串出现的次数
    • 代码:
      #include <string.h>
      #include <stdio.h>
      int main()
      {
          char a[100],b[100];
          printf("请输入一个字符串:\n");
          scanf("%s",a);
          getchar();
          printf("输入子串:\n");
          scanf("%s",b);
          getchar();//输入字符串和子串
          char *c = a;
          char *d = b;
          int num=0;
          int n=strlen(d);
          while(strlen(c)>0)
          {
              if(strncmp(c,d,n)==0)
              {
                  num++;
                  c=c+n;
              }
              else{
                  c++;
              }
      
          }
          printf("%d\n",num);
          return 0;
      }

      结果:

  • 题目: 编写一个C函数,将I am from shanghai 倒置为shanghai from am I,及将句子中的单词位置倒置,而不改变单词内部结构.
    • #include <stdio.h>
      char *convert(char *p, int len)
      {
          int i;
          char c;
          for (i = 0; i < len / 2; i++)
          {
              c = p[i];
              p[i] = p[len - i - 1];
              p[len - i - 1] = c;
          }
          return p;
      }
      int main()
      {
          char str[100]="I am from shanghai";
          int i = 0;
          int len = 0;
          //printf("Enter a string:\n");
          //scanf("%[^\n]", str);
          while (str[i] != '\0')
          {
              while (' ' == str[i])
              {
                  if (len != 0)
                  {
                      convert(&str[i - len], len);
                      len = 0;
                  }
                  i++;
              }
              if (str[i] != '\0')
              {
                  len++;
                  i++;
              }
              if ('\0' == str[i])
              {
                  if (len != 0)
                  {
                      convert(&str[i - len], len);
                  }
                  convert(str, i);
              }
          }
          printf("convert string is:%s\n", str);
          return 0;
      }

       

  • 题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.
  • 提示:帧头和帧尾分别是head和tail  字符串asdheadhauboisoktail中headhauboisoktail是合法帧

  • #include <stdio.h>
    int main()
    {
        char a[30];
        int i = 0;
        int first = 0;
        int local1 = 0, local2 = 0;
        printf("please input a string:");
        scanf("%s", a);
    
        while (a[i] != '\0')
        {
            if (a[i] == 'h' && first == 0)
            {
                if (a[i + 1] == 'e' && a[i + 2] == 'a' && a[i + 3] == 'd')
                {
                    local1 = i;
                    i = i + 3;
                    first++;
                }
            }
            if (a[i] == 't')
            {
                if (a[i + 1] == 'a' && a[i + 2] == 'i' && a[i + 3] == 'l')
                {
                    local2 = i;
                }
            }
            i++;
        }
        if ((local2 - local1) > 4)
        {
            for (i = local1; i <= local2 + 3; i++)
            {
                printf("%c", a[i]);
            }
            printf("找到了!\n");
        }
        else
            printf("not found!");
        return 0;
    }

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值