строковое значение, возвращающее нулевое значение - PullRequest
1 голос
/ 30 мая 2020

В моем коде, когда я пытаюсь распечатать значение результата внутри функции str, он все время показывает null. Не могли бы некоторые, пожалуйста, внести свой вклад. Он показывает правильное значение. Когда я пытался отобразить значение результата внутри for l oop на каждой итерации.

string str(string s, int mid){

string result;
for(int j=0;j<=mid;j++){
    result[j]= s[j];
}
return result;
}

class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
    int min= 0, max= 0,mid = 0;
    string temp2;
    max = strs[0].length()-1;
    mid = (min + max)/2;
    string temp = str(strs[0],mid);
    int flag1 = 0,flag2 = 1;

    cout<<temp<<endl;
    while(1){
        for(int i=1;i<strs.size(); i++){
            if(strs[i].compare(0,mid+1,temp,0,mid+1)!=0){
                if(flag1 == 1)
                    return temp2;
                if(mid == 0)
                    return " ";
                max = mid;
                temp2 = temp;
                mid = (min + max)/2;
                cout<<temp<<endl;
                temp = str(strs[0],mid);
                i = 1;
            }
            if(i+1 == strs.size()){
                if(mid == max)
                    return temp;
                min = mid;
                temp2 = temp;
                mid = (min + max)/2;
                temp = str(strs[0],mid);
                i = 1;
                flag1 = 1;
            }
        }
        return " ";
    }
}

1 Ответ

3 голосов
/ 30 мая 2020

Вы не можете изменить размер строки, используя operator[]. Вы пишете за пределами допустимого диапазона и вызываете неопределенное поведение. Используйте

result += s[j];

, чтобы добавить символы или инициализировать строку с правильным размером

string result(mid, '\0');

или просто скопируйте строку;

auto result = s.substr(0, mid + 1);

Вы можете заменить функцию str на

string str(string s, int mid){
    return s.substr(0, mid + 1);
}

или даже удалить функцию и заменить каждый вызов

str(strs[0],mid)

вызовом

strs[0].substr(0, mid + 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...