Професионална програма
Loading...
KonstantinNikolov avatar KonstantinNikolov -1 Точки

Удвояване елементите на string

Здравейте, искам да ви попитам как може да бъдат удвоени елементите на един string. Опитах сам с find и insert, но въобще не ми се получи.

За пример ще ви дам този стринг -  90А Т234

Трябва резултатът да е 9900АА ТТ223344

Благодаря предварително !!!

0
C++ Advanced 25/02/2019 15:24:12
j.petrov_90 avatar j.petrov_90 372 Точки

Привет,

Само не разбирам .find() каква работа има в цялата картинка?
Ти вече имаш стринта - какво търсиш в него?

Решение със .insert() може да се направи
const std::string myString("90A T234");
const size_t SIZE = myString.size();

std::string myStringDoubled = myString;

for(size_t i = 0; i < SIZE; ++i)
{
    myStringDoubled.insert((2 * i), 1, myString[i]);
}

Просто имай предвид, че от това по-бавно - няма на къде.
String-а работи със динамично заделена памет и всеки път като изискваш с 1 буква повече - това ще ти заделя нова памет и ще копира старата.
Дори да си бяхме запазили цялата памет предварително - пак щеше да имаш супер много излишни местения на букви (shift-ване).

Правилното решение (поне според мен):
const std::string myString("90A T234");
const size_t SIZE = myString.size();

std::string myStringDoubled(2 * SIZE); //заделяме си точно толкова памет колкоти ни трябва

for(size_t i = 0; i < SIZE; ++i)
{
    //за всяка буква от оригиналния стринг - правим 2 нейни копия в резултатния стринг
    myStringDoubled[2 * i] = myString[i];
    myStringDoubled[(2 * i) + 1] = myStringDoubled[(2 * i)];
}

Поздрави

0
25/02/2019 16:14:40
pesosz avatar pesosz 4 Точки

Може ли малко разяснение по кода, че не ми стана ясно точно какво се случва с това умножение и събиране  вътре в скобите на елементите от масива?

0
KonstantinNikolov avatar KonstantinNikolov -1 Точки

Благодаря за изчерпателния отговор!!! Много ми помогнахте!!! Надявам се да не съм Ви загубил времето!!!

0
j.petrov_90 avatar j.petrov_90 372 Точки

Колега @pesosz, вземи лист и химикал (наистина го направи, остави клавиатурата за момент).

Препиши for цикъла, за който ме питаш 3 пъти.
- Първия път замести буквата (променливата) 'i' с 0;
- Втория път замести буквата (променливата) 'i' с 1;
- Третия път замести буквата (променливата) 'i' с 2;

... и наблюдавай какво се случва.
С това трябва да ти се изчисти концепцията на for цикъла.

@KonstantinNikolov, радвам се, че съм помогнал.

Поздрави

0
26/02/2019 08:53:26