• 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("
    ");
            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
    ",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]='';
                        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]='';
                        q++;k=0;
                        i=t;
                    }
                }
            }
            printf("puzzle #%d:
    ",++cas);
            printf("Across
    ");
            for(i=0;i<p;++i){
                printf("%3d.%s
    ",B[i],b[i]);
            }
            printf("Down
    ");
            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]='';
                        cnt=0;
                        for(p=0;p<len2;++p){
                            c[j][cnt++]=c[j+1][p];
                        }
                        c[j][cnt]='';
                        cnt=0;
                        for(p=0;p<len1;++p){
                            c[j+1][cnt++]=temp[p];
                        }
                        c[j+1][cnt]='';
                    }
                }
            }
            for(i=0;i<q;++i){
                printf("%3d.%s
    ",C[i],c[i]);
            }
        }
        return 0;
    }

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

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

    while循环里面t忘记++

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

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

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

    记录完,k要记得归零

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

    最后的output后面没有空行

    小心数组越界。。

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

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

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

    这个地方。。

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

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

  • 相关阅读:
    WBS概念
    Cognos 8体系结构:请求流程
    Cognos8.4安装配置指南
    Cognos 8体系结构:层级结构
    程序猿媛都偷偷深爱的九大习惯
    Cookie是存储在客户端上的一小段数据
    Web前端必须规避的8个误区
    WEB前端开发常用的优化技巧汇总
    微信小程序怎么开发(小程序开发文档)
    入门 IT 行业,该具备哪些技能?
  • 原文地址:https://www.cnblogs.com/linkzijun/p/6189024.html
Copyright © 2020-2023  润新知