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 373 Точки

Привет,

Само не разбирам .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 373 Точки

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

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

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

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

Поздрави

0
26/02/2019 08:53:26
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.