2012-03-18 2 views
0

из пользовательского ввода, таких как:Определяется пользователем матрица символов

>~d 
alg 
^%r 

, что было бы лучшим способом создать квадратную матрицу обугленного с каждым из введенных значений, приписанных к соответствующему элементу? например в этом случае charArray [0] [0] будет «>», а charArray [2] [1] будет «%» и т. д.

Я пробовал использовать getchar(); однако у меня были все проблемы с «\ n», которые остались позади, и подумал, что, возможно, совершенно другой способ сделать это намного лучше.

char matrix[MAX][MAX]; 
char c; 
int matSize; 

std::cin >> matSize; 

for (int i = 0; i < matSize; ++i) 
    { 
     int j = 0; 

     while ((c = getchar()) != '\n') 
     { 
      matrix[i][j] = c; 
      ++j; 
     } 
    } 

ответ

0

Как вы используете C++, почему бы не использовать зЬй :: CIN и зЬй :: строка для чтения отверстия линии. Вероятно, это не самый лучший вариант, но он работает.

for (int i = 0; i < matSize; ++i) 
{ 
    std::cin >> in; 
    if (in.length() < matSize) 
    { 
     printf("Wrong length\n"); 
     return 1; 
    } 
    for (int j = 0; j < matSize; j++) 
    matrix[i][j] = in[j]; 
} 
0

Поскольку каждый matrix[i] является массив символов с фиксированным размером вы можете легко использовать std::istream::getline:

#include <iostream> 
#include <istream> 

#define MAX 10 

int main() 
{ 
    char matrix[MAX][MAX]; 
    char c; 
    int matSize; 

    std::cin >> matSize; 
    std::cin >> c; // don't forget to extract the first '\n' 

    if(matSize > MAX){ // prevent segmentation faults/buffer overflows 
     std::cerr << "Unsupported maximum matrix size" << std::endl; 
     return 1; 
    } 

    for(int i = 0; i < matSize; ++i){ 
     std::cin.getline(matrix[i],MAX); // extract a line into your matrix 
    } 


    std::cout << std::endl; 
    for(int i = 0; i < matSize; ++i){ 
     std::cout << matrix[i] << std::endl; 
    } 

    return 0; 
} 
Смежные вопросы