Training4:字符串训练 练习

1. 题目请编写一个C函数,该函数将一个字符串逆序

#include <stdio.h>
#include <string.h>
int main()
{
    char a[30];
    int n;
    printf("请输入一个字符串(30个字节以内):");
    scanf("%s",a);
    n = strlen(a);
    printf("逆序:");
    while(n>0)
    {
       n--;
       printf("%c",a[n]);
    }
    printf("\n");
    return 0;

}


 

2. 题目请编写一个C函数,该函数可以实现将一个整数转为任意进制的字符串输出

 

3. 题目输入一个字符串,计算字符串中子串出现的次数

#include <stdio.h>
#include <string.h>
void my_fun(char a[],char b[])
{
   int i = 0;
   int j = 0;
   int count=0;
   int n = 0;
   int num = 0;
   n = strlen(b);
   while(a[i]!='\0')
   {
       if(a[i]==b[j])
       {
          count++;
	  j++;
	  i++;
	  if((count%n)==0)
	  {
	     num++;
	     j = 0;
	  }
       }
       else if(count!=0)
       {
          count = 0;
	  j = 0;
       }
       else
       {
          i++;
       }
   }
   printf("字串个数为:%d\n",num);
}
int main()
{
   char a[20];
   char b[5];
   printf("请输入一个字符串(20个字节以内):");
   scanf("%s",a);
   printf("请输入子串(5个字节以内:)");
   scanf("%s",b);
   my_fun(a,b);
   return 0;
}



 

4. 题目编写一个C函数,”I am from shanghai ”倒置为”shanghai from am I”,及将句子中的单词位置倒置,而不改变单词内部结构.

#include <stdio.h>
#include <string.h>
int reserve(char a[],int n)
{
   
   int i=0,j=0;
   char temp = 0;
   int m = n-1;
   for(i=0;i<m;i++)
   {
      n--;
      for(j=0;j<n;j++)
      {
         temp = a[j];
	 a[j] = a[j+1];
	 a[j+1] = temp;
      }
   }
}
int re_reserve(char *a)
{
    int n = 0;
    while(1)
    {
       n++;
       if((*a)==' '||(*a)=='\0')
       {
          reserve(a-n+1,n-1);
	  n = 0;
	 
       }
       if(*a=='\0')
       {
          break; 
       }
       a++;
    }
}
int main()
{
    char a[]="I am from shanghai";
    int n = strlen(a);
    reserve(a,n);
    re_reserve(a);
    printf("output:%s\n",a);
    return 0;
}


 

5. 题目输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.

提示:帧头和帧尾分别是headtail  字符串”asdheadhauboisoktail”中headhauboisoktail是合法帧

#include <stdio.h>
#include <string.h>
int deal(char str[],char h[],char end[])
{
     int i=0,j=0,k=0,x=0;
     int size_h,size_e;
     char temp[20]={0};
     int count_h=0;
     int count_e=0;
     size_h=strlen(h);
     size_e=strlen(end);
     while(str[i]!='0')
     {
         if(str[i]==end[k])
	 {
	     count_e++;
	     k++;
	 }
         if(count_h==size_h)
	 {
	     if(count_e==size_e)
	     {
	         printf("合法字符串为:");
	         for(x=0;x<=(j-size_e);x++)
		 {
		     printf("%c",temp[x]);
		 }
		 printf("\n");
		 return 1;
	     }
	     temp[j] = str[i];
	     j++;
	 }
	 else if(str[i]==h[j])
	 {
	     count_h++;
	     j++;
	 }
	 else
	 {
	     j=k=count_h=count_e=0;
	 }
         i++;
     }
     printf("没有合法字符串\n");
     return 0;
}
int main()
{
     char str[]="asdheadhauboisoktail";
     char h[]="head";
     char end[]="tail";
     deal(str,h,end);
     return 0;
}


 

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值