Как добавить строку C ++ без использования функции добавления? - PullRequest
0 голосов
/ 10 января 2020

Мне нужно добавить значение строки2 к строке1 без использования метода добавления в библиотеке строк. Пока что мне удалось сделать это только:

#include<iostream>
#include<string>
using namespace std;
int main(){
    string s1="Messi ";
    string s2="best";
    int i=s1.size();
    int j=s2.size();
    int count;
    for(count=0;count<=j;count++){
        s1[i++]=s2[count];

    }   
    cout<<s1;
}

Но это только дает мне значение s1, которое равно «Месси». Однако я проверил это: s1 [8]. Поскольку s1 имеет индекс 5, s1 [8] не должен работать, верно? Но это так, и я получаю «s», который находится в s2. Таким образом, это означает, что значение s2 действительно идет в s1, но каким-то образом ввод s1 показывает только «Messi».

Причина, по которой я спрашиваю это, потому что нам дали этот набор инструкций для реализации программы (да кажется, что он используется в c строках, но нам было сказано реализовать в строковом объекте):

Step 1: Initialize i= strlen(s1)
Step 2: Initialize j=strlen(s2)
Step 3: Initialize count=0
Step 4: Repeat steps 5 to 7 while count<=j
Step 5: s1[i]=s2[count]
Step 6: i=i+1
Step 7: count=count+1

Ответы [ 3 ]

2 голосов
/ 10 января 2020

Я думаю, это то, что вы хотите

#include<iostream>
#include<string>
using namespace std;
int main(){
    string s1="string1 ";
    string s2="string2";
    int i=s1.size();
    int j=s2.size();
    s1.resize(i+j);

    for(int count=0;count<=j;count++){

        s1[count+i]=s2[count];

    }   
    cout<<s1;
}

После внесенных вами изменений, я думаю, что код, который вы ищете, выглядит следующим образом

#include<iostream>
#include<cstring>
using namespace std;
int main(){
    char s1[10]="str1 ";
    char s2[]="str2";
    int i=strlen(s1);
    int j=strlen(s2);
    int count = 0;
    for(;count<=j;){
        s1[i]=s2[count];
        i=i+1;
        count=count+1;

    }   
    cout<<s1;
}
0 голосов
/ 10 января 2020

Вы можете использовать оператор += или просто использовать insert:

string s1 = "Messi ";
string s2 = "best";

s1.insert(s1.size(), s2);
cout << s1 << endl;
cout << s1[8] << endl; // s

Или с итераторами:

s1.insert(s1.cend(), s2.cbegin(), s2.cend());
0 голосов
/ 10 января 2020

std::string это не предназначено для использования таким образом. Класс выделяет свое хранилище, оператор песка [] не может его развернуть, поэтому строка не может стать длиннее. Документированный и гарантированный способ добавления s2 к s1:

s1 += s2;

Тогда вам не следует использовать std::string, потому что делать это с неопределенным поведением ... Собственно, при условии длины этих начальных значений, std::string разрешено не использовать динамическую c память и использовать хранилище классов, и у вас нет возможности узнать, так ли это с уровня доступа пользователя. Это детали реализации.

Вы должны resize() строку, прежде чем писать в нее, и придерживаться идеи, что size() строки в качестве индекса в отличие от длины включает ноль символов. Изменение размера может изменить тип хранилища и выделить хранилище, необходимое для хранения второй строки. max_size() возвращает действительное количество символов, которое строка может хранить без перераспределения.

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