Есть некоторая строка (слово, число), например “home”. Необходимо заполнить этим словом строку (последовательно буквами этого слова) за определённое количество итераций.
Например: базовая строка – “home”, требуемое число символов результата 11, результат: “homehomehom”
В этой задаче главным требованием должно быть: сделать это как можно больше разными способами! (задача то сама по себе совсем элементарная).
Решения:
Вот как это будет выглядеть при исполнении:
Здесь показано несколько (5) вариантов решения для базовой строки в формате std::string. Но ещё много интересных вариантов может быть записано для строки в формате char[] (такой код будет даже проще для понимания).
P.S. В таком случае ваши функции вариантов (если вы хотите сохранить массив функций-обработчиков) могут иметь прототип:
Предлагайте следующие варианты!
Наилучший по оптимальности из показанных будет rep4, но там выделение буфера (char buf[1000]) сделано с потолка и чисто для иллюстрации, легко его переполнить.
Добавлю ещё 2 вариата в развитие этого способа:
string rep6( const string& base, uint rep ) {
char* buf = (char*)alloca( rep * 2 );
strcpy( buf, base.c_str() );
while( strlen( buf ) < rep )
memmove( buf + strlen( buf ), buf, strlen( buf ) + 1 ); // удвоить длину
buf[ rep ] = '\0';
return string( buf );
}
string rep7( const string& base, uint rep ) {
char buf[ rep * 2 ];
strcpy( buf, base.c_str() );
while( strlen( buf ) < rep )
memmove( buf + strlen( buf ), buf, strlen( buf ) + 1 ); // удвоить длину
buf[ rep ] = '\0';
return string( buf );
}
#include
#include
using namespace std;
int main()
{
int a;
cout<>a;
int const BUFERSIZE=a;
int bufer=0;
string slovo;
cout<>slovo;
do
{for(int i=0;i<slovo.size();i++)
{
if(bufer<BUFERSIZE)
cout<<slovo[i];
bufer++;
}
}while(bufer < BUFERSIZE);
return 0;
}