poj1617---columnar encryption
题意:给出keyword,如BATBOY,A的ascii值最小,所以第二列最先输出,B有两个,左边的先输出,也就是说,接下来输出第一列和第4列,
所以每一个字母都带有一个ascii值和一个序号,用结构组合起来
#include#include #include<string.h>struct com{int asc;int th; }; int cmp(const void *a,const void *b){if(((struct com *)a)->asc!=((struct com *)b)->asc)return(((struct com *)a)->asc>((struct com *)b)->asc);elsereturn(((struct com *)a)->th-((struct com *)b)->th);} int main() {int i,j;struct com Arr[10];char temp[11],cybier[101];while(scanf("%s",temp),strcmp(temp,"THEEND")){scanf("%s",cybier);int column=strlen(temp);int row=strlen(cybier)/column;for(i=0;i ){Arr[i].asc=temp[i]-'A';Arr[i].th=i+1;}qsort(Arr,column,sizeof(Arr[0]),cmp);int cur=0;char table[row][column+1];for(j=0;j ){for(i=0;i ){table[i][Arr[j].th-1]=cybier[cur++];}}for(i=0;i
){table[i][column]='\0';}for(i=0;i
){printf("%s",table[i]);}printf("\n");}return 0; }
输出出了很多次问题:实际上我如果定义个table[row][column]数组,对这个数组的值采用的是双重for循环赋值的形式,每一行可以不要'\0',用printf(table),但是在最后一行就得超出数组之外添加'\0',但是这就越界了
所以定义为table[row][column+1],在每行最后一列加'\0',最后for循环输出每一行
转载于:https://www.cnblogs.com/gabygoole/p/4494957.html
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
