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

来源:互联网 发布:和女生网络聊天用语 编辑:程序博客网 时间:2024/06/10 07:31

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

/*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

0 0