Arhn - архитектура программирования

Распечатайте столбец формата String to Matrix за столбцом

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

Пример:
Ввод(строка):

ПРИВЕТ, МИР

вывод (квадратная матрица):

---0  1  2  3

   0 H L R

   1 E O L

   2 L W D

   3 --O

----------------------------КОНЕЦ ВОПРОСА----- -------

Моя c-программа:

void main()

{

char arr[4][4],a[]="HELLOWORLD";

int i,j,n=0;

clrscr();

for(i=0;i<4;i++)

{

    for(j=0;j<4;j++)

    {

        if(a[n]!=a[n+1]){

        arr[j][i]=a[n];

        n++;}

        else

        arr[j][i]=' ';

    }

}

for(i=0;i<4;i++){

for(j=0;j<4;j++){

printf("%c",arr[i][j]);}}

getch();

}

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

Также помогите мне, как мне объявить матрицу arr [X] [X], динамически соответствующую строке ввода пользователя, сказав «ДОБРО ПОЖАЛОВАТЬ», если ей нужна матрица 3x3.


  • Я рекомендую вам прочитать Как отлаживать небольшие программы Эрик Липперт, и узнайте, как использовать отладчик для пошагового выполнения кода построчно. 20.07.2017
  • Вы должны сделать отступ в своем коде. 20.07.2017

Ответы:


1

как это:

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

void square_output(const char *mes);

int main(void){
    square_output("HELLOWORLD");
    puts("");
    square_output("WELCOME");
    return 0;
}

void square_output(const char *mes){
    char *str = malloc(strlen(mes)*2);
    char *cp = str;
    char *matrix;
    int side, exp_len, mat_size;
    //separate of duplicate letter by ' '
    while(*mes){
        *cp++ = *mes++;
        if(mes[-1] == *mes)
            *cp++ = ' ';
    }
    *cp = 0;

    exp_len = cp - str;
    side = ceil(sqrt(exp_len));//dim
    mat_size = side * side;
    matrix = malloc(mat_size);//1D array
    memset(matrix, ' ', mat_size);//initialize by ' '
    memcpy(matrix, str, exp_len);
    {   //print
        int c, r;
        for(c = 0; c < side; ++c){
            for(r = 0; r < side; ++r){
                if(r)
                    putchar(' ');
                putchar(matrix[r * side + c]);//This means matrix[r][c] in 2D
            }
            puts("\n");
        }
    }
    free(matrix);
    free(str);
}
20.07.2017
  • @ BLUEPIXY помогите. stackoverflow .com/questions/45211559/ 20.07.2017

  • 2

    Чтобы динамически получить размер, вы должны выбрать библиотеку cmath и использовать функции sqrt и ceil.

    почему ceil, если длина вашей строки не является идеальным квадратом.

    int dim = (int) ceil(sqrt(sizeof(a)/sizeof(char)));
    char arr[dim][dim];
    

    затем выполните итерацию по строке и используйте целочисленные переменные row и col для итерации по вашей матрице

    int row=0, col=0;
    for (i=0; i<sizeof(a)/sizeof(char); i++) {
        arr[row][col] = a[i];
    
        col++;
        if (col>=dim) {
            col = 0;
            row++;
        }
    }
    

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

    for (i=0; i<dim; i++) 
        for (j=0; j<dim; j++)
            arr[i][j] = '.';
    
    20.07.2017
  • Так как пробелы могут быть вставлены, dim вычисления должны использовать длину результата. 20.07.2017
  • int dim = (int) ceil(sqrt(sizeof(a)/sizeof(char))); char arr [тусклый] [тусклый]; Я получаю сообщение об ошибке компиляции, говорящее, что требуется постоянное значение. при объявлении char arr[4][4] вместо dim он запускается. есть ли способ запустить char arr[dim][dim];? 20.07.2017
  • @VineethMourya Используйте malloc, если вы не можете использовать VLA. 20.07.2017
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..