实验六

#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;
}

// 函数功能描述:
// 使用二分查找算法在从地址x开始的连续n个数据项中,查找特定数据项item
// 如果找到,返回其下标; 如果没找到,返回-1
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+1;
    else if (item < *(x + mid))
        high=mid - 1;
    else
        low=mid + 1;
}

    return -1;
}

 

 

 

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

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

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
void fun(char *a)
{
    /*****ERROR********/
    int i=0;
    char *p=a;
    /****ERROR***/
    while ( *p&&*p == '*')
    {
        a[i] = *p;
        i++;
        p++;
    }
    while (*p)
    {
        /******ERROR*******/
        if (*p != '*')
        {
            a[i] = *p;
            i++;
        }
        p++;
    }
    /******ERROR*******/
    a[i] = '\0';
}

int main()
{
    char s[81];
    
    printf("Enter a string :\n");
    gets(s);
    /***ERROR******/
    fun(s);
    printf("The string after deleted:\n");
    puts(s);

    return 0;
}

 

/*
设输入的字符串中只包含字母和*号。
编写函数,实现:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。
 
例如,若字符串中的内容为****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;
}

 

#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; 
}

// 函数定义 
// 功能:判断指针s指向的字符串是否是回文串,如果是,返回1;否则,返回0。 
int isPalindrome(char *s) 
{ 
    int i;
    char* t = s, * f = s;
    while (*t)
        t++;
    t--;
    while (*s)
    {
        if (*t == *f)
            return 1;
        else
            return 0;
        t--;
        f++;
    }
}

 

#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); 
}

 

 

posted @ 2021-12-17 18:36  枝鹊不惊  阅读(24)  评论(0编辑  收藏  举报