Преобразовать матрицу в текстовую строку - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Ввести символьную матрицу. Инвертировать её относительно середины строки. Преобразовать матрицу в стринг. Найти длину стринга. Не знаю как преобразовать в стринг Матрица инвертируется, выводится, а вот как правильно преобразовать в стринг не знаю, помогите пожалуйста Вот мой код:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
void mass (char ** a, int k, int l)
{
    char ch; 
    int i, j;
    ch = getchar();
    for (i=0; i < k; i++)
    {
        for (j=0; j < l; j++)
        {
            printf ("a[%d][%d]=",i,j);
            a[i][j] = getchar();
            fflush(stdin);
        }
    } 
}
void output (char ** a, int k, int l)
{
     int i, j;
     for (i=0; i<k; i++) 
    {
        for (j=0; j < l; j++)
            printf("%c ",a[i][j]);
            printf("\n");
     }
} 
void swap (char ** a, int k, int l)
{
     char b;
     int i, j;
     for(i = 0;i < k; i++)
     {
           for(j=0;j < (l/2); j++)
           { 
              b = a[i][j];
              a[i][j] = a[i][l-j-1];
              a[i][l-1-j] = b;
              }
              printf("\n");
        }
}  
     
int main()
{
    int i, j, n;
    char *s, **a = new char*[n];
    char c;
    printf("input n=");
    scanf("%d",&n);
    for (i=0; i<n; i++)
    a[i] = new char[n];
    mass (a, n, n);
    output (a, n, n);
    swap (a, n, n);
    output (a, n, n);
    for (i=0; i<n; i++)
    for (j=0; j<n; j++)
    *(s+(i*n+j)) = *(*(a+i)+j);
    *(s+n*n) = '\0';
    printf("s = %s",s);
    printf("\n");
    printf("%d",strlen(s));
    getch();
}

Решение задачи: «Преобразовать матрицу в текстовую строку»

textual
Листинг программы
#include <stdio.h>
//#include <conio.h>
#include <stdlib.h>
#include <string.h>
 
void mass (char *a, int n)
{
    char ch; 
    int i, j;
    ch = getchar();
    for (i=0; i < n; i++)
        for (j=0; j < n; j++) {
            printf ("a[%d][%d]=",i,j);
            while((ch=getchar())=='\n')
                ;
            *(a+i*n+j) = ch;
            //fflush(stdin);
        }
}
 
void output (char *a, int n)
{
     int i, j;
     for (i=0; i<n; i++) {
        for (j=0; j<n; j++)
            printf("%c ", *(a+i*n+j));
        printf("\n");
     }
}
 
void swap (char *a, int n)
{
     char b;
     int i, j;
     for(i = 0; i<n; i++) {
            for(j=0; j<(n/2); j++) { 
                b = *(a+i*n+j);
                *(a+i*n+j) = *(a+i*n+n-j-1);
                *(a+i*n+n-j-1) = b;
            }
            printf("\n");
        }
}  
     
int main()
{
    int i, j, k, n;
    char c;
    
    printf("input n=");
    scanf("%d",&n);
    char a[n][n];
    
    mass (&a[0][0], n);
    output (&a[0][0], n);
    swap (&a[0][0], n);
    output (&a[0][0], n);
    
    char string[n*n+1];
    for (i=0, k=0; i<n; ++i)
        for (j=0; j<n; ++j, ++k)
            string[k] = a[i][j];
    string[++k]=0;
            
    puts(string);
 
    return 0;
}

Объяснение кода листинга программы

  1. mass: Эта функция считывает элементы матрицы, используя стандартный ввод, и сохраняет их в матрице.
  2. output: Эта функция выводит элементы матрицы на стандартный вывод.
  3. swap: Эта функция меняет местами элементы матрицы, начиная с середины строки.
  4. main: Эта функция считывает размерность матрицы, создает матрицу, вызывает функции mass, output и swap для этой матрицы, создает строку, считывая элементы матрицы в эту строку, и выводит эту строку.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы