Звездный паттерн с использованием строк и манипуляций со строками в c ++ - PullRequest
0 голосов
/ 03 февраля 2020

Этот код печатает звездочку.

// CPP Program to print 
// pattern using std::setw and std::fill 
#include <iostream> 
#include <iomanip> // std::setfill, std::setw 

int main() 
{ 
    int n = 5; 
    for (int i = 1; i <= n; i++) { 
        std::cout << std::left << std::setfill(' ') << std::setw(n); 
        std::cout << std::string(i, '*') << std::endl; 
    } 
    return 0;
} 

Но я не знаю, как работает std::string(i,'*'). И если я пишу только std::cout << std::string(i, '*') << std::endl;, то ничего не получаю на выходе.

Ответы [ 3 ]

1 голос
/ 03 февраля 2020

Я не знаю, как работает std :: string (i, '*')

Проверьте документацию для конструктора std::string(count, ch) на этом сайте . Я нахожу документацию на C ++ трудной для чтения, поэтому она говорит об этом конструкторе:

basic_string( size_type count,
              CharT ch,
              const Allocator& alloc = Allocator() );

Constructs the string with "count" copies of character "ch".

Так что это означает, что вы передаете ему одно число n и один символ c, и оно будет вернуть строку с n копиями c. Поэтому, если вы позвоните std::string(4, 'A'), он вернет AAAA.

, если я напишу только std :: cout << std :: string (i, '*') << std :: endl ; затем ничего не получая в выводе. </p>

Я не совсем понимаю, какое изменение вы сделали в программе, чтобы не получить никакого вывода, так как только std::cout << std::string(i, '*') << std::endl; внутри l oop все равно должно что-то печатать ,

Проверьте документы для std::left, которые имеют хороший пример, который использует std::fill и std::setw тоже.

0 голосов
/ 03 февраля 2020

Этот точно такой же код работает для меня. Может быть, проблема с вашим компилятором или вы делаете что-то глупое, например, запускаете не тот исполняемый файл или что-то в этом роде enter image description here

0 голосов
/ 03 февраля 2020

Но я не знаю, как работает std :: string (i, '*')

Проверьте эту ссылку cplusplus.com .

Специально проверьте конструктор

string (size_t n, char c);

Что делает этот конструктор, он возвращает строковый объект, содержащий n число c символы .

Ваш код работает нормально в GNU C ++. Проверьте это codeLink . Какой компилятор вы используете для его запуска?

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