字符串-字符串的包含-寻找兄弟字符串 课后题答案

    xiaoxiao2023-03-24  2

    问题:如果两个字符串中的字符串一样,出现的次数也一样,只是顺序不同,则认为两个字符串是兄弟字符串.现在提供一个字符串,请问如何在字典中迅速找到他的兄弟字符串

    /* 2016 9 27 问题: 如果两个字符串中的字符串一样,出现的次数也一样,只是顺序不同,则认为两个字符串是兄弟字符串. 现在提供一个字符串,请问如何在字典中迅速找到他的兄弟字符串 1.简单起见字符串的元素都为小写 2.目标abc 字典为kjjhkjdkfnsljdfcbakjhjbcaacb(有cba bca acb三个兄弟) 思路 1.建立一个26个元素的数组,对应26个字母,某个字母出现一次则在对应的位置++ 2.一次在字典中取出三个元素组成待验证字符串,按1步骤处理 3.比较两个数组是否相同,若相同则是兄弟字符串 */ #include <stdlib.h> #include <stdio.h> #include <string.h> /* 判断是否为兄弟a是比较的字符串,b是字典 */ int FindCharBrother(char *a,char *b,int left,int right) { int arr_a[26]={0}; int arr_obj[26]={0}; int i; for(i=0;i<strlen(a);i++) { arr_a[a[i]-'a']++; } for(i=left;i<right;i++) { arr_obj[b[i]-'a']++; } //判断两个数组是否相同 for(i=0;i<26;i++) { if(arr_a[i]!=arr_obj[i]) return 0; } return 1; } /* 打印兄弟字符串 */ void PrinCharBrother(char *b,int left,int right) { int i; for(i=left;i<right;i++) { printf("%c",b[i]); } printf("\n"); } /* 依次在字典中取出strlen(a)元素,用FindCharBrother()判断是否为兄弟 */ void CharBrother(char *a,char *b) { int i; int flag; for(i=0;i<strlen(b);i++) { flag=FindCharBrother(a,b,i,i+strlen(a));//依次在字典中取出strlen(a)元素判断是否为兄弟 if(flag) PrinCharBrother(b,i,i+strlen(a)); } } int main() { char a[]="abc"; char b[]="kjjhkjdkfnsljdfcbakjhjbcaacb";//字典 CharBrother(a,b); } ./a.out cba bca acb

    转载请注明原文地址: https://ju.6miu.com/read-1201170.html
    最新回复(0)