苏嵌学习——Training4字符串训练7.15

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

#include <stdio.h>
#include <string.h>

int main()
{
    char a[40];
    int n;

    printf("请输入一个字符串(40个字节以内):");
    scanf("%s",a);
    n = strlen(a);
    printf("逆序:");

    while(n>0)
    {
       n--;
       printf("%c",a[n]);
    }
    printf("\n");
    return 0;
 
}

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

#include <stdio.h>

void to_change(int num,int n);

int main()
{
        int num,n;

        printf("Please enter a number to change:");
        scanf("%d",&num);
        printf("请输入要转换的进制(如2或8,16等):");
        scanf("%d",&n);
        to_change(num,n);

        printf("\n");
    return 0;
}

void to_change(int num,int n)            //利用递归函数的实现反序输出
{
        int r;

        r = num % n;
        if(num > 0)
                to_change( num / n,n );
        putchar( '0' + r);
        return ;
}

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

#include <stdio.h>
#include <string.h>

void str_son(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);
   str_son(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、题目: 输入一个字符串,同时输入帧头和帧尾(可以是多个字符),将该字符串中合法的帧识别出来.

提示:帧头和帧尾分别是head和tail字符串”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;
}

猜你喜欢

转载自blog.csdn.net/qq_36974603/article/details/81057046