Как умножить строки?

Я хочу иметь такую строку

Serial.println(count*"B");

Поэтому, если count=6, будет напечатано BBBBBB и т. д.

Есть ли что-нибудь подобное для arduino?

, 👍6

Обсуждение

Нет ничего более эффективного, чем цикл., @Ignacio Vazquez-Abrams

Цикл, который печатает char за char, или цикл, который создает строку и печатается в конце цикла?, @Mirror318

Это будет зависеть от того, имеет ли count разумный предел., @Ignacio Vazquez-Abrams

For(let str = 'a'; str.length<6; str+='a'){ Console.log(str) }, @Jackie


3 ответа


Лучший ответ:

1

Может быть и более простой "нубский" способ:

int count = 6

for(int i=0; i<count; i++)
{
  Serial.print("b");
}

Serial.println();
,

Это то, что я в итоге сделал (хотя сделал цикл for одной строкой). На самом деле я не собирался создавать свой собственный метод, как это сделали другие, я просто надеялся, что будет какой-то синтаксис string * int, @Mirror318


3

Для этого можно написать вспомогательную функцию, например:

void printRepeat (Stream & device, const char * str, unsigned int count)
  {
  while (count-- > 0)
    device.print (str);
  }   // конец printRepeat

void setup() 
  {
  Serial.begin (115200);
  printRepeat (Serial, "-", 20);
  Serial.println ();
  } // конец настройки

void loop() 
{
  printRepeat (Serial, "Hello, World! ", 5);
  Serial.println ();
  delay (500);
} // конец цикла

Функции printRepeat передается аргумент Stream, который может быть чем-то вроде Serial, Serial1, экземпляр SoftwareSerial и т. д.

,

2

Для интереса вот переформулированная версия ответа Ника Гэммона. немного магии C++:

// "Повторяющаяся строка", от которой нет никакой пользы, кроме как для печати.
class RepeatedString : public Printable
{
public:
    RepeatedString(const char * str, unsigned int count)
    : _str(str), _count(count) {}
    size_t printTo(Print& p) const
    {
        size_t sz = 0;
        for (unsigned int i = 0; i < _count; i++)
            sz += p.print(_str);
        return sz;
    }
private:
    const char * _str;
    unsigned int _count;
};

void setup() 
{
    Serial.begin(115200);
    Serial.println(RepeatedString("-", 20));
}

void loop() 
{
    Serial.println(RepeatedString("Hello, World! ", 5));
    delay(500);
}

Вы можете использовать .print() и .println() RepeatedString на чем угодно который может печатать.

,

Хороший! Вы также можете перегрузить «*», чтобы работал точный синтаксис OP!, @xyz