2015-10-24 2 views
0

Я пытаюсь написать программу, в которой пользователь вводит текст, а консоль печатает этот текст в сетке звездочек размером 7 на 5.Печать массивов на основе ввода пользователем в C

e.g;

Enter a word: 
a 

**** 
    * 
***** 
* * 
***** 

Однако у меня возникли проблемы с идентификацией персонажей, а затем с сообщением о программе.

Моя попытка до сих пор:

#include <stdio.h> 
#include <string.h> 


char a[7][6] = { 
"  ", 
"  ", 
"**** ", 
" *", 
"*****", 
"* *", 
"*****" 
}; 

...other letters... 

char word[20]; 
int i; 
int j; 
char letter[2]; 

int main() {//main 

fgets(word, sizeof(word), stdin); 

for (j = 0; j < strlen(word); j++) { 
strcpy(letter, word[j]); 
    for (i = 0; i < 7 ; i++) { 
     printf("%s %d\n", letter[i]); 
    } 
} 

printf("Total number of characters processed: %d\n", strlen(word) - 1); 

return (0); 
}//*main 

Буквы сделаны в отдельном массиве и печатается строка за строкой через петлю для того, чтобы их напечатать один за другим по горизонтали.

Моя лучшая идея была в том, что переменная letter, которая изменила бы значение на текущий символ, считанный с word, но я знаю, что это неверно.

+0

Вы хотите использовать только C или вы также можете использовать функции C++? Btw Я думаю, что это хороший способ сопоставить все буквы в сетке звездочек, а затем проанализировать входные данные для функции, которая преобразует строку/символы со звездочкой –

+0

Один преобразованный в сетку (многомерный массив), вы можете ее распечатать горизонтально –

+0

Просто C. Не возражаете ли вы расширить то, что вы имеете в виду? Я думал о том, что у меня есть все буквы в трехмерном массиве, но потом я не был уверен, как в конечном итоге вызвать их по очереди. –

ответ

0

Это рабочий пример, который печатает целое (комментарии по коду):

#include <stdio.h> 
#include <stdlib.h> 

#define maxchar 10  // number of characters in asterisk form 
#define maxrows 6    // vertical length 
#define maxcols 5    // horizontal length 
#define imax 5    // number of chars to be displayed in asterisk form 

int main() 
{ 
    // testing word with spaces 
    char number[imax] = "92 02"; 

    // array of numbers 
    char letter[maxrows][maxchar][maxcols] = 
    { // j=0 , j=1 , j=2 , j=3 , j=4 , j=5 , j=6 , j=7 , j=8 , j=9 
     { " ** ", "*** ", "*** ", "*** ", "* *", "****", "* ", "****", " ** ", " ***" }, // row=0 
     { "* *", " * ", " *", " *", "* *", "* ", "* ", " *", "* *", "* *" }, // row=1 
     { "* *", " * ", " *", " ** ", "****", "*** ", "*** ", " *", " ** ", "* *" }, // row=2 
     { "* *", " * ", "*** ", " *", " *", " *", "* *", " *", "* *", " ***" }, // row=3 
     { "* *", " * ", "* ", " *", " *", " *", "* *", " *", "* *", " *" }, // row=4 
     { " ** ", "****", "****", "*** ", " *", "*** ", "*** ", " *", " ** ", " *" } // row=5 
    }; 


    // "iterators" 
    int row, col, i; 

    for(row=0; row < maxrows; ++row) // print from up to down 
    { 
     for(i=0; i < imax; ++i)  // for each character in array "number" 
     { 
      int j = number[i] - '0'; // get position in "letter". For characters, change to j = number[i] - 'a'; 

      if(j<0) 
      printf(" ");  // if number[i] is not a valid character, print a space 
      else 
      for(col = 0; col < maxcols; ++col)  
       printf("%c", letter[row][j][col]); // print each * at given row 

      printf(" ");   // print a small space between characters 
     } 
     printf("\n");    // proceed to next row 
    } 

    return 0; 
} 

Хотя я использовал цифры вместо символов, минимальный чанг es будет соответствовать вашим потребностям. Для этого кода number[] = "92 02" будет напечатано как:

*** ***   ** *** 
* *  *  * *  * 
* *  *  * *  * 
    *** ***   * * *** 
    * *   * * *  
    * ****   ** **** 
0

Я бы поставил все буквы в одном массиве:

char letters[26][7][6] = {{ 
    "  ", 
    "  ", 
    "**** ", 
    " *", 
    "*****", 
    "* *", 
    "*****" 
    }, 
    { 
    "* ", 
    "* ", 
    "* ", 
    "* ", 
    "*****", 
    "* *", 
    "*****" 
    }, 
    ... 
}; 

Тогда вы можете получить правильный так:

int letterIdx; 
for (j = 0; j < strlen(word); j++) { 
    // make sure this character is a letter, if not go to the next one 
    if (!isalpha(word[i]) continue; 
    // subtract the ASCII value of 'a' from the ASCII value of 
    // the lower case version of the current letter to get a number between 0 and 25 
    letterIdx = tolower(word[i]) - 'a'; 
    for (i = 0; i < 7 ; i++) { 
     printf("%s\n", letters[letterIdx][i]); 
    } 
} 
+0

Не могли бы вы объяснить немного дальше? В частности, 3-я и 4-я строки, а также как программа будет использовать вход для поиска правильной комбинации букв в массиве. –

+0

@MiguelRestrepo См. Мое редактирование. – dbush

Смежные вопросы