UVA232字符串处理

发布时间:2016-12-19 11:38:07编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"UVA232字符串处理 ",主要涉及到UVA232字符串处理 方面的内容,对于UVA232字符串处理 感兴趣的同学可以参考一下。

#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>using namespace std;int rr,cc;char s[100][100];int  num[100][100];bool border(int x,int y){    if(x>=0&&x<rr&&y>=0&&y<cc) return true;    return false;}int Move[2][2]={{0,-1},{-1,0}};bool check(int x,int y){    if(s[x][y]=='*') return false;    for(int i=0;i<2;++i){        int tx=x+Move[i][0];        int ty=y+Move[i][1];        if(!border(tx,ty)) return true;        if(s[tx][ty]=='*') return true;    }    return false;}char b[200][200];char c[200][200];char temp[200];int B[200],C[200];int main(){    int cas=0;    while(scanf("%d",&rr),rr){        memset(num,0,sizeof(num));        if(cas) printf("\n");        scanf("%d",&cc);        int i,j,y=0;        for(i=0;i<rr;++i){            scanf("%s",s[i]);        }        for(i=0;i<rr;++i){            for(j=0;j<cc;++j){                if(check(i,j)){                    num[i][j]=++y;                }            }        }        int p=0,q=0;        for(i=0;i<rr;++i){            int k=0;            for(j=0;j<cc;++j){                // printf("s%d%d:%c check:%d\n",i,j,s[i][j],check(i,j));                if(num[i][j]){                    b[p][k++]=s[i][j];                    if(k==1) B[p]=num[i][j];                    int t=j+1;                    while(t<cc&&s[i][t]!='*'){                        b[p][k++]=s[i][t];                        t++;                    }                    b[p][k]='\0';                    p++;k=0;                    j=t;                }            }        }        for(j=0;j<cc;++j){            int k=0;            for(i=0;i<rr;++i){                if(num[i][j]){                    c[q][k++]=s[i][j];                    if(k==1) C[q]=num[i][j];                    int t=i+1;                    while(t<rr&&s[t][j]!='*'){                        c[q][k++]=s[t][j];                        t++;                    }                    c[q][k]='\0';                    q++;k=0;                    i=t;                }            }        }        printf("puzzle #%d:\n",++cas);        printf("Across\n");        for(i=0;i<p;++i){            printf("%3d.%s\n",B[i],b[i]);        }        printf("Down\n");        for(i=0;i<q;++i){            for(j=0;j<q-1;++j){                if(C[j+1]<C[j]){                    swap(C[j+1],C[j]);                    int cnt=0;                    int len1=strlen(c[j]);                    int len2=strlen(c[j+1]);                    for(p=0;p<len1;++p){                        temp[cnt++]=c[j][p];                    }                    temp[cnt]='\0';                    cnt=0;                    for(p=0;p<len2;++p){                        c[j][cnt++]=c[j+1][p];                    }                    c[j][cnt]='\0';                    cnt=0;                    for(p=0;p<len1;++p){                        c[j+1][cnt++]=temp[p];                    }                    c[j+1][cnt]='\0';                }            }        }        for(i=0;i<q;++i){            printf("%3d.%s\n",C[i],c[i]);        }    }    return 0;}

这个题有几个点需要注意。。第一。。字符串以'\0'结尾。。不要开小数组。。

第二对齐输出格式。。仔细对照会发现是%3d

while循环里面t忘记++

down list的word的含义理解错误。。标号仍然用第一次标的

down list需要从小到大输出。。我冒泡了一下。。

存储标号的num数组每次都要memset

记录完,k要记得归零

两个output之间要有一个空行。。

最后的output后面没有空行

小心数组越界。。

如果数据非常大。。并且。。单个字母是一个输出。。

那么我们b[20][20]显然不够。。

肯定要大于20的。。c数组也是。。。这个题主要错在了考察

这个地方。。

我们也可以边找边输出。。

但是c数组怎么处理呢。。。


上一篇:jdk8中java.util.concurrent包分析
下一篇:阻塞队列LinkedBlockingQueue和并发队列ConcurrentLinkedQueue

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款