Умножающая строка - PullRequest
       3

Умножающая строка

0 голосов
/ 03 марта 2019

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

#include<stdio.h>
#include<conio.h>
main()
{    
     int max = 10
     for (int i = 1; i <= max; ++i){
         printf("*"*(2 * i - 1);
     }

}

Ответы [ 3 ]

0 голосов
/ 03 марта 2019

Языковая семантика не поддерживает то, что вы пытаетесь сделать.В C строка ни в коем случае не является типом первого класса - это просто массив char, поэтому вся обработка строк выполняется через функции;вы не можете выполнять прямые операции над ними;и даже если бы вы могли сомневаться, умножение будет одним из них - он имеет очень ограниченный вариант использования, легко реализуемый с использованием более простых операций.

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

#include <stdio.h> 

void printRepeatString( const char* str, int n )
{
    for( int i = 0; i < n; n++ )
    {
        printf( "%s", str ) ;
    }
}

int main( void )
{    
     const int max = 10
     for (int i = 1; i <= max; i++ )
     {
         printRepeatString( "*", (2 * i) - 1 ) ;
         putchar( '\n' ) ;
     }

    return 0 ;
}
0 голосов
/ 04 марта 2019

Альтернативой «умножению» строки на '*' является создание самой длинной и затем печать ее усеченной части.

Использование "%.*s", n, s для печати массива символов s доn символов.

#include<stdio.h>
#define MAX 10

int main(void) {
  char s[2 * MAX] = {0};
  memset(s, '*', 2 * MAX - 1);

  for (int i = 1; i <= MAX; ++i) {
    printf("%.*s\n", 2 * i - 1, s);
  }

}

Вывод

*
***
*****
*******
*********
***********
*************
***************
*****************
*******************
0 голосов
/ 03 марта 2019

Вы можете просто повторить печать нужного количества строк.

#include<stdio.h>
#include<conio.h>
main()
{    
     int max = 10; // a semicolon is added to make it compile
     for (int i = 1; i <= max; ++i){
         for (int j = 0; j < (2 * i - 1); j++){ // repeat (2 * i - 1) times
             printf("*");
         }
         printf("\n"); // separate lines
     }

}

Я уважаю исходный код, поэтому некоторые моменты не очень хороши (бессмысленно, включая нестандартные conio.h и нестандартныеостается определение main() (вместо int main(void))).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...