C语言字符串基本操作(3)

//首个匹配字串的起始位置
int position(char* str,int n, char *str_son,int n_son){
    if(*str=='\0'||*str_son=='\0'){return -1;}
    if(n<=0||n_son<=0||n_son>n){return -1;}
    int i=0;
    for(;i<n-n_son;i++){
        if(*str!=(*str_son)){
            str++;         
        }
        else{
            for(int j=0;j<n_son;j++){
                if(str[j]!=str_son[j]){
                    break;
                }             
            }
            return i;
        }
    }
    return -1;
}
 

int main(){   
    char str[]="abcdefghigklmn";
    printf("%d\n",position(str,strlen(str),"klm",strlen("klm")));     
    return 0;
}

7. 求两个字符串的最大公共子串


 给定字符串A和B,输出A和B中的最大公共子串。比如A="aocdfe" B="pmcdfa" 则输出"cdf"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

//两个字符串的最大公共字串(重要)
char* max_sub_str(char* str1,int str1_l, char* str2, int str2_l){
    char* max_sub = (char*)malloc(100*sizeof(char));
    char* max_sub_help = (char*)malloc(100*sizeof(char));
    int p_str1,p_str2,p_str_help;
    for(int i=0;i<str1_l;i++){    //最好先判断哪个str长
        for(int j=0;j<str2_l;j++){
            p_str1 = i;
            p_str2 = j;
            while(str1[p_str1]==str2[p_str2]){
                max_sub_help[p_str_help]=str2[p_str2];
                p_str1++;
                p_str2++;
                p_str_help++;
            }
            if(strlen(max_sub_help)>strlen(max_sub)){
                strcpy(max_sub,max_sub_help);
            }
            p_str_help=0;
        } 
    }
    free(max_sub_help);
    return max_sub; 
}
 

int main(){   
    char str[]="abcdefg";
    char* sub_str = max_sub_str(str,7,"efghi",5);
    printf("%s\n",sub_str);
    free(sub_str);     
    return 0;
}

Linux公社的RSS地址https://www.linuxidc.com/rssFeed.aspx

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9b11db595636b160d24a02b63e763314.html