Вопрос об звёздочках и конкатенации строк в C ++ - PullRequest
0 голосов
/ 03 апреля 2020

Итак, в настоящее время я прохожу курс ускоренного C ++ по удеме Джереми Сика, и я был на том уроке, в котором он упоминает конкатенацию строк, и в одной части он дал задание напечатать что-то (БЕЗ ИСПОЛЬЗОВАНИЯ NESTED LOOPS), например:

OUTPUT:

*
**
***
****

(- Так что я знаю о циклах из более ранних, и я не совсем новичок в программировании на C ++, но я просто дополняю знания из предыдущих, и я знаю, что эта проблема может быть решенным с помощью вложенных циклов. Но ЭТО НЕ МОЙ ВОПРОС, ПРОДОЛЖАЙТЕ ЧТЕНИЕ, ПОТОМУ ЧТО Я ДОЛЖЕН ВСТРОИТЬ ВВЕДЕНИЕ В МОЙ ВОПРОС)

Прежде чем он создал программу, исходный код которой похож на этот (КОТОРЫЙ Я ЗАВЕРШАЮ ПОНЯТЬ)

int main()
{
cout << "Please enter your name:";
string name;
cin>>name;

string greeting="Hello, " + name + "!";
string spaces(greeting.size(), ' ');
string stars(greeting.size(), '*');

cout << "**" stars << "**" << endl;
     << "* "<< spaces << " *"<< endl;
     << "* "<< greeting << " *"<< endl; 
     << "* "<< spaces << " *" <<endl;
     << "**" stars << "**" << endl;  

return 0;

} 

Теперь о моем вопросе: я пытался выполнить задачу, которую он дал, и у меня получилось что-то вроде этого:

#include<iostream>
#include<string>
using namespace std;

int main()
{
  string star="*";
  int br=1;

  cout<<star<<endl;
  while(br<4)
  {
    br+=1;
    string (newstar.size(br, '*') );

    cout<<newstar<<endl;
  } 



  return 0;
}

Теперь эта программа вызвала ошибку из-за string (newstar.size(br, '*') ); что я не понимаю, почему это неправильно и почему string newstar(br, '*'); правильно без .size и без ()?

Ответы [ 2 ]

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

Я думаю, что вы намеревались иметь:

 string newstar(br, '*');

вместо:

string (newstar.size(br, '*') );

также возможно увеличить br после этой строки, и вы можете удалить 'cout << star < <endl; '</p>

См. конструктор заливки: http://www.cplusplus.com/reference/string/string/string/

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

Ошибка:

prog.cc: In function 'int main()':
prog.cc:14:13: error: 'newstar' was not declared in this scope
     string (newstar.size(br, '*') );
             ^~~~~~~
prog.cc:14:13: note: suggested alternative: 'star'
     string (newstar.size(br, '*') );
             ^~~~~~~
             star

Поскольку вы не объявили newstar. Компилятор на этом уже останавливается, но есть и другое: std::string::size не принимает никаких параметров и неясно, что вы ожидаете от написания string ( some_number);.

Поскольку я не совсем понимаю логику c вашего кода, я не могу предложить вам полное исправление, но могу дать подсказку. Это:

std::cout << std::string(4,'*');

создает std::string, состоящий из 4 копий символа * и печатает его на консоли.

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