在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。
int main(int argc, const char * argv[]) {
// 函数声明 void getMaxDirLen(char *,int *,int *,unsigned long );
// 字典串 char Dictorys[100]={"interface implementation protected foundation description Range"};
unsigned long len = strlen(Dictorys); int nums[20]; // 再次最后一个字母的位置集 int lens[20]; // 单词长度集 getMaxDirLen(Dictorys, nums, lens,len);
return 0; }
//按字母长度由大到小排序 void getMaxDirLen(char *Dictorys,int *nums,int *lens,unsigned long len) { int *ls = lens; // 指向位置集的指针 char *dic = Dictorys; // 指向单词集的指针 int *n = nums; // 指向最后一个字母位置集的指针 int a = 0; // 长度集的大小 for (int i =0; i<len-1; i++) { if(*(dic+i) == ' ') { *(n+a) = i ; if(a==0) *(ls+a) = i - *(n+a-1) ; else *(ls+a) = i - *(n+a-1) -1; a++; } } *(n+a) = len ; // 最后一个单词最后一个字母的位置 *(ls+a) = len - *(n+a-1) -1; // 最后一个单词的长度
// 所有单词的长度 // for(int i= 0;i<=a;i++) // { // printf("最后一个单词的最后一个字母的位置 %d\t",nums); // printf("最后一个字母的长度 %d\n" ,lens); // }
int tnums; int tlens; // 位置集和长度集的长度为a+1; for(int i=1;i<a+1;i++) { for(int j=a;j>=i;j--) { if(*(lens+j)> *(lens+j-1)) { tnums = *(nums+j-1); *(nums+j-1) = *(nums+j); *(nums+j) = tnums;
tlens = *(lens+j-1); *(lens+j-1) = *(lens+j); *(lens+j) = tlens; } } } printf("在一个已知的字符串中查找最长单词,假定字符串中只含字母和空格,空格用来分隔不同单词。\n"); printf("字符串为:\t %s \n",Dictorys); printf("最长单词为:\t"); for (int i = nums[0]-lens[0]; i<=nums[0]; i++) {
printf("%c",Dictorys); } printf("\t长度为: %d",lens[0]); printf("\n"); }
|