标题:求大佬解题
只看楼主
wuwuwuwuwuwu
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-6-22
结帖率:0
已结贴  问题点数:20 回复次数:1 
求大佬解题
输入任一单词,用5×5的'*'号矩阵打印。
例如,输入”hello”,打印
*   * ***** *     *      ***
*   * *     *     *     *   *
***** ****  *     *     *   *
*   * *     *     *     *   *
*   * ***** ***** *****  ***

这个程序添加什么代码,可以使输入的长字母拐弯,使得下一行和前面一行不重叠


#include"stdio.h"
#include"stdlib.h"
#include"string.h"
int main()
{
 int i,j;
 int length=0;//记录字符串长度
 int pass[300];//记录输入数据的字母序号,单词最长不超过300个字母
 char input[300];//记录输入数据
 char output[5][150];//记录输出数据
 char *word[26];//记录26个字母的星号矩阵
 ///////////////////////////字母的星号矩阵定义如下////////////////////////////
 word[0]="    *      \n  *   *    \n*       *  \n* * * * *  \n*       *  ";//a
 word[1]="* * * *    \n*       *  \n* * * *    \n*       *  \n* * * *    ";//b
 word[2]="  * * * *  \n*          \n*          \n*          \n  * * * *  ";//c
 word[3]="* * * *    \n*       *  \n*       *  \n*       *  \n* * * *    ";//d
 word[4]="* * * * *  \n*          \n* * * * *  \n*          \n* * * * *  ";//e
 word[5]="* * * * *  \n*          \n* * * * *  \n*          \n*          ";//f
 word[6]="  * * * *  \n*          \n*     * *  \n*       *  \n  * * * *  ";//g
 word[7]="*       *  \n*       *  \n* * * * *  \n*       *  \n*       *  ";//h
 word[8]="    *      \n    *      \n    *      \n    *      \n    *      ";//i
 word[9]="      *    \n      *    \n      *    \n  *   *    \n  * * *    ";//j
 word[10]="*     * *  \n*   *      \n* *        \n*   *      \n*     * *  ";//k
 word[11]="*          \n*          \n*          \n*       *  \n* * * * *  ";//l
 word[12]="  *   *    \n*   *   *  \n*   *   *  \n*   *   *  \n*   *   *  ";//m
 word[13]="*       *  \n* *     *  \n*   *   *  \n*     * *  \n*       *  ";//n
 word[14]="  * * *    \n*       *  \n*       *  \n*       *  \n  * * *    ";//o
 word[15]="* * * *    \n*       *  \n*       *  \n* * * *    \n*          ";//p
 word[16]="  * * *    \n*       *  \n*   *   *  \n*     * *  \n  * * * *  ";//q
 word[17]="* * * *    \n*       *  \n*       *  \n* * * *    \n*       *  ";//r
 word[18]="* * * * *  \n*          \n* * * * *  \n        *  \n* * * * *  ";//s
 word[19]="* * * * *  \n    *      \n    *      \n    *      \n    *      ";//t
 word[20]="*       *  \n*       *  \n*       *  \n*       *  \n* * * * *  ";//u
 word[21]="*       *  \n*       *  \n*       *  \n  *   *    \n    *      ";//v
 word[22]="*   *   *  \n*   *   *  \n*   *   *  \n*   *   *  \n  *   *    ";//w
 word[23]="*       *  \n  *   *    \n    *      \n  *   *    \n*       *  ";//x
 word[24]="*       *  \n  *   *    \n    *      \n    *      \n    *      ";//y
 word[25]="* * * * *  \n      *    \n    *      \n  *        \n* * * * *  ";//z
 while(1)
 {
  printf("在此输入单词: ");
  scanf("%s",&input);
  length=strlen(input);//读取字符串长度
  for(i=0;i<length;i++)
  {
   switch(input[i])//可以同时输入大写或者小写
   {
    case 'a':
    case 'A':
    {
     pass[i]=0;
     break;
    }
    case 'b':
    case 'B':
    {
     pass[i]=1;
     break;
    }
    case 'c':
    case 'C':
    {
     pass[i]=2;
     break;
    }
    case 'd':
    case 'D':
    {
     pass[i]=3;
     break;
    }
    case 'e':
    case 'E':
    {
     pass[i]=4;
     break;
    }
    case 'f':
    case 'F':
    {
     pass[i]=5;
     break;
    }
    case 'g':
    case 'G':
    {
     pass[i]=6;
     break;
    }
    case 'h':
    case 'H':
    {
     pass[i]=7;
     break;
    }
    case 'i':
    case 'I':
    {
     pass[i]=8;
     break;
    }
    case 'j':
    case 'J':
    {
     pass[i]=9;
     break;
    }
    case 'k':
    case 'K':
    {
     pass[i]=10;
     break;
    }
    case 'l':
    case 'L':
    {
     pass[i]=11;
     break;
    }
    case 'm':
    case 'M':
    {
     pass[i]=12;
     break;
    }
    case 'n':
    case 'N':
    {
     pass[i]=13;
     break;
    }
    case 'o':
    case 'O':
    {
     pass[i]=14;
     break;
    }
    case 'p':
    case 'P':
    {
     pass[i]=15;
     break;
    }
    case 'q':
    case 'Q':
    {
     pass[i]=16;
     break;
    }
    case 'r':
    case 'R':
    {
     pass[i]=17;
     break;
    }
    case 's':
    case 'S':
    {
     pass[i]=18;
     break;
    }
    case 't':
    case 'T':
    {
     pass[i]=19;
     break;
    }
    case 'u':
    case 'U':
    {
     pass[i]=20;
     break;
    }
    case 'v':
    case 'V':
    {
     pass[i]=21;
     break;
    }
    case 'w':
    case 'W':
    {
     pass[i]=22;
     break;
    }
    case 'x':
    case 'X':
    {
     pass[i]=23;
     break;
    }
    case 'y':
    case 'Y':
    {
     pass[i]=24;
     break;
    }
    case 'z':
    case 'Z':
    {
     pass[i]=25;
     break;
    }
   }
  }
  for(i=0;i<length;i++)
  {
   for(j=0;j<11;j++)
   {
    output[0][i*11+j]=word[pass[i]][j];
    output[1][i*11+j]=word[pass[i]][12+j];
    output[2][i*11+j]=word[pass[i]][24+j];
    output[3][i*11+j]=word[pass[i]][36+j];
    output[4][i*11+j]=word[pass[i]][48+j];
   }
  }
  for(i=0;i<5;i++)
  {
   for(j=0;j<length*11;j++)
   {
    printf("%c",output[i][j]);
   }
   
   printf("\n");
  }
  printf("\n\n");
  system("pause");
  system("cls");
 }
}



搜索更多相关主题的帖子: word break 输入 case pass 
2020-06-22 23:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:20 
在你代码的基础上修改,未测试
注意其中的“const size_t console_w = 80; // 控制台每行最多显示几个字符”这一句,每个人设置得不一样

程序代码:
#include <stdio.h>
#include <string.h>

static void print_graphic_( size_t console_w, size_t word_w, size_t word_h, size_t word_n, const char* words, size_t buf[], size_t m )
{
    for( size_t r=0; r!=word_h; ++r )
    {
        for( size_t c=0; c!=m; ++c )
            printf( "%.*s", (int)word_w, words + r*word_n*word_w + buf[c]*word_w );
        if( m*word_w != console_w )
            putchar( '\n' );
    }
}

void print_graphic( const char* s )
{
    const size_t console_w = 80; // 控制台每行最多显示几个字符
    const size_t word_w    = 11; // 每个字模的宽度
    const size_t word_h    =  6; // 每个字模的高度
    const size_t word_n    = 26; // 一共有几个字模
    const char* words      =
        "     *      * * * *      * * * *  * * * *    * * * * *  * * * * *    * * * *  *       *      *            *    *     * *  *            *   *    *       *    * * *    * * * *      * * *    * * * *    * * * * *  * * * * *  *       *  *       *  *   *   *  *       *  *       *  * * * * * "
        "   *   *    *       *  *          *       *  *          *          *          *       *      *            *    *   *      *          *   *   *  * *     *  *       *  *       *  *       *  *       *  *              *      *       *  *       *  *   *   *    *   *      *   *          *   "
        " *       *  * * * *    *          *       *  * * * * *  * * * * *  *     * *  * * * * *      *            *    * *        *          *   *   *  *   *   *  *       *  *       *  *   *   *  *       *  * * * * *      *      *       *  *       *  *   *   *      *          *          *     "
        " * * * * *  *       *  *          *       *  *          *          *       *  *       *      *        *   *    *   *      *       *  *   *   *  *     * *  *       *  * * * *    *     * *  * * * *            *      *      *       *    *   *    *   *   *    *   *        *        *       "
        " *       *  * * * *      * * * *  * * * *    * * * * *  *            * * * *  *       *      *        * * *    *     * *  * * * * *  *   *   *  *       *    * * *    *            * * * *  *       *  * * * * *      *      * * * * *      *        *   *    *       *      *      * * * * * "
        "                                                                                                                                                                                                                                                                                             ";
    const size_t m = console_w/word_w; // 每行最多显示几个字

    size_t buf[300];
    size_t i = 0;
    for( const char* p=s; *p; ++p )
    {
        if( *p>='A' && *p<='Z' )
            buf[i++] = *p-'A';
        else if( *p>='a' && *p<='z' )
            buf[i++] = *p-'a';

        if( i==m || !*(p+1) )
        {
            print_graphic_( console_w, word_w, word_h, word_n, words, buf, i );
            i = 0;
        }
    }
}

int main( void )
{
    for( char str[301]; printf("在此输入单词: ") && scanf("%s",str); )
        print_graphic( str );
}
2020-06-23 10:01



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502239-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.576837 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved