UVA 2312:Crossword Answers (字符串处理)

来源:互联网 发布:java web接口开发 编辑:程序博客网 时间:2024/06/06 05:43

Crossword Answers 

题意:

就是按照行和列来读取单词,前置第一个字母的编号。
编号的规则:第一行和第一列都有编号,其他位置只有左边或者上边有 * 的时候才有编号,编号从 1 递增

解题思路:

按行读取的很好办,按次序依次读完就可以了。
至于按列读取的话,由于读取顺序的问题,不能一列一列的读,所以还是只能一行一行读,读到字母的时候直接往下走,为了避免重复,我们这里把所有读过的字母全部变成 *


代码:

#include<iostream>#include <cstdio>#include <cstring>#include <sstream>#include <cmath>using namespace std;char mp[15][15];int num[15][15];int main(){    int n,m,ca=1;    while(scanf("%d",&n)!=EOF)    {        if(n==0)            break;        scanf("%d",&m);        getchar();        for(int i=0; i<n; i++)            gets(mp[i]);        //对所有字符编号        int len=1;        memset(num,0,sizeof(num));        for(int i=0; i<n; i++)        {            for(int j=0; j<m; j++)                if(i==0 || j==0)                {                    if(mp[i][j] != '*')                        num[i][j] = len++;                }                else                {                    if(mp[i][j] != '*')                        if(mp[i-1][j]=='*' || mp[i][j-1]=='*')                            num[i][j] = len++;                }        }        if(ca!=1)            printf("\n");        printf("puzzle #%d:\n",ca++);        printf("Across\n");        for(int i=0; i<n; i++)        {            for(int j=0; j<m; j++)            {                if(mp[i][j]!='*')                {                    printf("%3d.",num[i][j]);                    while(j<m&&mp[i][j]!='*')                    {                        printf("%c",mp[i][j++]);                    }                    j--;                    printf("\n");                }            }        }        printf("Down\n");        for(int i=0; i<n; i++)        {            for(int j=0; j<m; j++)            {                if(mp[i][j]!='*')                {                    printf("%3d.",num[i][j]);                    int k=i;                    while(k<n&&mp[k][j]!='*')                    {                        printf("%c",mp[k][j]);                        mp[k][j]='*';                        k++;                    }                    printf("\n");                }            }        }    }    return 0;}