Слияние строк в c ++, не добавление в, Слияние - PullRequest
0 голосов
/ 11 ноября 2018

У меня проблемы со слиянием двух строк в c ++, вот пример кода моей проблемы

#include<iostream>

using namespace std;

// I want to add these two strings


string str1 = "H _ l _ o";
string str2 = "_ e _ l _";

//Now if i try add these together


cout << str1 + str2 << endl;


// outputs "H _ l _ o _ e _ l _"




// i Want it to output "H e l l o"

// anyway i could do that? Thanks

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

operator + между двумя строками создает новую строку, которая является объединением двух входных строк.

Вы должны создать свою собственную функцию.Вот пример, где символы "_" из str1 заменяются соответствующими символами в str2.(предполагается, что str1 и str2 имеют одинаковый размер)

string merged = str1;
for (int i=0; i < str1.size(); ++i)
{
    if (str1[i] == '_')
            merged[i] = str2[i];
}
0 голосов
/ 11 ноября 2018

вы можете создать функцию, которая возвращает объединенную строку, проверяющую, когда другая строка меньше другой, и использующую «идентификатор слияния», который будет заменять специальным символом, что-то вроде этого:

//----------------function declaration----------------
std::string merge_strings(std::string strA, std::string strB, char mergeIdentifier);
int greater_number(int numberA, int numberB);
int smaller_number(int numberA, int numberB);

int main()
{
    std::string str1 = "H _ l _ o";
    std::string str2 = " _ e _ l _";

    std::cout << merge_strings(str1, str2, '_'); //outputs H e l l o

    return 0;
}

//-----------------function definition----------------
std::string merge_strings(std::string strA, std::string strB, char mergeIdentifier)
{
    std::string merged = "";

    int greaterIndex = greater_number(strA.size(), strB.size());
    int smallerIndex = smaller_number(strA.size(), strB.size());

    for(int currentCharIndex = 0; currentCharIndex < greaterIndex; currentCharIndex++)
    {
        if(currentCharIndex < smallerIndex)
        {
            if(strA[currentCharIndex] == mergeIdentifier)
                merged += strB[currentCharIndex];
            else if(strA[currentCharIndex] != mergeIdentifier)
                merged += strA[currentCharIndex];
        }
        else
            break;
    }

    return merged;
}


int greater_number(int numberA, int numberB){return numberA > numberB? numberA : numberB;}
int smaller_number(int numberA, int numberB){return numberA < numberB? numberA : numberB;}

Если одна из строк меньше другой, она объединит только размер меньшей строки, но вы можете просто добавить отсутствующие символы, проверив, какая строка длиннее, и добавив символы из размера объединенной строки в конец более длинной строки.

0 голосов
/ 11 ноября 2018

Прежде всего, я предполагаю, что в ваших входных строках не должно быть пробелов, иначе вывод будет выглядеть странно.

В C ++ есть предопределенная функция или метод merge(), вам придется написать ее самостоятельно. Это должно дать вам некоторую начальную помощь (псевдокод):

string mergeStrings(string1, string2)
{
    string output = "";  // empty string. The loop below will add to it.
    output.reserve(string1.length);   // pre-allocate memory for performance

    // add two chars per loop iteration, one from string1, one from string2:
    for(i=0; i < min(string1.length, string2.length)/2; i+=2)
    {
        output += string1[i];
        output += string2[i+1];
    }

    return output;
}

Пожалуйста, проверьте ручкой и бумагой, правильны ли границы петли: там может быть ошибка "отключено одним".

Кроме того, вам нужно подумать о том, что должна делать функция, если входные строки имеют разную длину!

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