实验6

1.

#include<stdio.h>
#define N 5
int binarysearch(int *x,int n,int item);

int main()
{
    int a[N]={2,7,19,45,66};
    int i,index,key;
    
    printf("数组a中的数据:\n");
    for(i=0;i<N;i++)
        printf("%d ",a[i]);
    printf("\n");
    
    printf("输入待查找的数据项:");
    scanf("%d",&key);
    
    index=binarysearch(a,N,key);
    
    if(index>=0)
        printf("%d在数组中,下标为%d\n",key,index);
    else
        printf("%d不在数组中\n",key);
        
    return 0;
}

int binarysearch(int *x,int n,int item)
{
    int low,high,mid;
    
    low=0;
    high=n-1;
    
    while(low<=high)
    {
        mid=(low+high)/2;
        if(item==*(x+mid))
            return mid;
        else if(item<*(x+mid))
            high=mid-1;
        else
            low=mid+1;
    }
    return -1;
}

 

 

 

 

 

 

2

#include<string.h>
#include<stdio.h>
#include<Stdlib.h>
void fun(char *a)
{
    int i=0;
    char *p=a;
    while(*p&&*p=='*')
    {
        a[i]=*p;
        i++;
        p++;
    }
    while(*p)
    {
        if(*p!='*')
        {
            a[i]=*p;
            i++;
        }
        p++;
    }
    a[i]='\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;
}

 

 

 

3

/*
设输入的字符串中只包含字母和*号。
编写函数,实现:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。
 
例如,若字符串中的内容为****A*BC*DEF*G*******
删除后,字符串中的内容则应当是****ABCDEFG******

在编写函数时,不得使用C语言提供的字符串函数。
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fun(char *a)
{
    /**ERROR******/
    int i=0;
    char *t = a, *f = a;
    char *q = a;

    while (*t)
        t++;
    t--;//找到最后一个字符 

    while (*t == '*')
        t--;//定位字母后的* 

    while (*f == '*')
        f++;//定位字母前的* 
        
    /***ERROR***/
    while (q < f)
    {
        a[i] = *q;
        q++;
        i++;
    }

    while (q < t)
    {
        /***ERROR**/
        if (*q != '*')
        {
            a[i] = *q;
            i++;
        }
        q++;
    }

    while (*q)
    {
        a[i] = *q;
        i++;
        q++;
    }

    /**ERROR**/
    a[i] = '\0';
}

int main()
{
    char s[81];

    printf("Entre a string:\n");
    gets(s);
    /**ERROR**/
    fun(s);
    printf("The sting after deleted:\n");
    puts(s);

    return 0;
}

 

 

 

4

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

#define N 80
int ispalindrome(char *s);

int main()
{
    char str[N];
    int flag;
    
    printf("Enter a string:\n");
    gets(str);
    
    flag=ispalindrome(str);
    
    if(flag)
        printf("YES\n");
    else
        printf("NO\n");
        
    return 0;
 } 
 
 int ispalindrome(char *s)
 {
     char *a=s;
     char *b=s;
     int i=0,j=0;
     while(*b){
         b++;
         j++;
    }
    b--;
    j--;
    while(i!=j&&j!=i+1){
        if(*a!=*b){
            return 0;
        }
        a++;i++;
        b--;j--;
    }
     if(i==j||j==i+1)
     return 1;
 }

 

 

 

 

 

5

#include <stdio.h>
#define N 80

int count(char *str, char *substr); // 函数声明

int main()
{
    char str[N], substr[N];
    int n;

    gets(str);      // 输入母串
    gets(substr);   // 输入子串
    n = count(str, substr);     // 函数调用
    printf("%d\n", n);

    return 0;
}

int count(char *str, char *substr)
{
    int i, j, k;
    int num = 0;

    for(i=0;i<N; ++i)
        for(j=i, k=0; substr[k] == str[j]; k++, j++)
            if(substr[k+1] == '\0')
            {
                num++;
                break;
            }
    
    return(num);
}

 

 

 

 

 实验总结:

数组的认识不够深,运用不熟练。实验四中因为不知道如何表示*a,*b分别从前往后、从后往前相遇而多设了一组int i,j来表示;还需要重新再学习数组。

再次练习了二分法,还是以填空的形式,自己写也要能写出来。

实验五 子串与母串自己写可能写不出来。

还有去掉内*或内及后*,oj题我用数组写的一直是错的,要回去好好看一下为什么错了

posted @ 2021-12-15 11:35  gfygfy  阅读(17)  评论(0编辑  收藏  举报