方法一:统计相应字符的个数(用它们的ASCLL码统计)
首先建个字符表,即129个元素的数组,比如:a[129]。
(ASCLL码表从000开始,128以后的字符现在编译器大多不识别)
并把它初始化为0,当下面统计字符个数的时候,把与该字符的ASCLL码对应的数组a的元素加1,比如:检测到字符a,其ASCLL码值097,故,a[97]++
#include#include int main() { int a[129]={}; int i,p,q; char str1[20],str2[20]; gets(str1);gets(str2); p=strlen(str1),q=strlen(str2); for(i=0;i
方法二:用字符串str1去遍历字符串str2,如果有相同的就碰撞,即将这两个字符都赋值为0。最后进行遍历,判断现在两个字符串的元素是否都为0,是的话就是重排串。
#include#include int main() { char str1[20],str2[20]; int i,j,p,q; gets(str1);gets(str2); p=strlen(str1); q=strlen(str2); printf("%s and %s ",str1,str2); if(p!=q) {printf("are not mutually sorted string.");return 0;} //上一行比较p,q,即比较字符串的长度 else for(i=0;i
方法三:将字符串按照ASCLL码大小进行排序,然后比较
(这个算法思路是对的,还有一点小问题,学习通半对)
#include#include int main() { char str1[20],str2[20]; int i,j,t,p,q,cnt,min; gets(str1);gets(str2); p=strlen(str1); q=strlen(str2); //排序的方法有很多,我下面用的是选择排序,并且非必要不交换^-^ for(i=0;i str1[j]) t=str1[j],cnt++,min=j; } if(cnt!=0) t=str1[i],str1[i]=str1[min],str1[min]=t; } for(i=0;i str2[j]) t=str2[j],cnt++,min=j; } if(cnt!=0) t=str2[i],str2[i]=str2[min],str2[min]=t; } if(strcmp(str1,str2)==0) printf("%s and %s are mutually sorted string.",str1,str2); else printf("%s and %s are not mutually sorted string.",str1,str2); return 0; }



