SDUST数据结构 - chap4 串

函数题:

  6-1 查找子串:

裁判测试程序样例:

#include <stdio.h>
#define MAXS 30

char *search(char *s, char *t);
void ReadString( char s[] ); /* 裁判提供,细节不表 */

int main()
{
    char s[MAXS], t[MAXS], *pos;

    ReadString(s);
    ReadString(t);
    pos = search(s, t);
    if ( pos != NULL )
        printf("%d\n", pos - s);
    else
        printf("-1\n");

    return 0;
}

/* 你的代码将被嵌在这里 */

 

 

输入样例1:

The C Programming Language
ram

 

输出样例1:

10

 

输入样例2:

The C Programming Language
bored

 

输出样例:

-1

 

代码:

char *search(char *s, char *t)
{
    int i=0,j=1;
    while(s[i]!='\0')
    {
        if(s[i] == t[0])
        {
            j=1;
            while(s[i+j] == t[j] && t[j] != '\0')
            {
                j++;
            }
            if(t[j]=='\0')
                return s+i;
        }
        i++;
    }
    return NULL;
}
View Code

 

 

编程题:

  7-1 删除字符串中的子串:

 

输入样例:

Tomcat is a male ccatat
cat

 

输出样例:

Tom is a male 

 

代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[81]={0},s2[81]={0},s3[81];
    gets(s1);
    gets(s2);//gets()函数读取一行输入,遇到会车结束 
    while(strstr(s1, s2)!=NULL)//strstr用于判断s1串中是否含有s2串 
    {
        int len1=strlen(s1);
        int len2=strlen(s2);
        strcpy(s3, strstr(s1, s2));//将目标串提取出来丙拷贝到s3中 
        int len3=strlen(s3);
        strcpy(s1+len1-len3, s3+len2);
    }
    int l=strlen(s1);//遍历输出,其实可以用puts()函数,,, 
    for(int i=0;i<l;i++)
    {
        printf("%c",s1[i]);
     } 
    return 0;
}
View Code

 

 

  7-2 字符串循环左移:

 

输入样例:

Hello World!
2

 

输出样例:

llo World!He

 

代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[101]={0}, s2[101]={0};
    int index;
    gets(s1);
    scanf("%d", &index);
    if(index>strlen(s1))//判断 :index大于长度的话,取余 
    {
        index = index%strlen(s1);
    }
        int len = strlen(s1);
        int j=0;
        for(int i=index;i<len;i++,j++)
        {
            s2[j] = s1[i];//先将左移部分以外的部分依次填入型字符输出中, 
        }
        //j-=1;
        for(int i=0;i<index;i++,j++)
        {    
            s2[j] = s1[i];//再讲左移部分补到结尾 
        }
        //s2[j]='\0';
        puts(s2);    
    return 0;
}
View Code

 

 

  7-3 最长对称子串:

 

输入样例:

Is PAT&TAP symmetric?

 

输出样例:

11

 

代码:

#include<stdio.h>
#include<string.h>
int main()
{
    char s1[1001]={0},s2[1001]={0};
    int len;
    int max=0;
    gets(s1);
    len = strlen(s1);
    int k;
    for(int i=0;i<len;i++)//遍历 
    {
        for(int j=0;j<len-i;j++)
        {
            for(k=0;k<(i+1)/2;k++)//对半进行对比 
            {
                if(s1[j+k] != s1[j+i-k])//不想等就退出 
                    break;
            }
            if(k<(i+1)/2)//小于则继续 
                continue;
            else
            {
                max=i+1;
            }
        }
    }
    printf("%d\n", max);
    return 0;
}
View Code
posted @ 2020-11-27 21:13  3cH0_Nu1L  阅读(129)  评论(0编辑  收藏  举报