Member 12827269 Ответов: 2

Как мне решить эту проблему из архива задач индийской вычислительной Олимпиады?


Вот в чем вопрос : Архив проблем IARCS[^]

Что я уже пробовал:

Я написал код следующим образом, хотя, насколько мне известно, он логически и синтаксически корректен, он дает ошибку во время выполнения. Любые предложения и советы приветствуются.
#include<bits stdc++.h="">
using namespace std;
#define c temp[j]

int main()
{
    ios::sync_with_stdio(false);
    vector<string> words;
    string temp,uni;
    int N,i,j,start,no=0;

    //Input and Computation
    cin >> N;
    for(i = 0;i < N;i++)
    {
        getline(cin,temp);//Getting the line of text
        start = 0;
        for(j = 0;j < (int)temp.length();j++)//Extracting words and storing in vector
        {
            if(c >= 65 && c <= 90)
                c = c + 32;

            if(c == ' '||c == '.'||c == ';'||c == ','||c == ':')
            {
                uni = temp.substr(start,j-start-1);
                words.push_back(uni);
                no++;
                start = j;
            }
        }
        temp = "";
    }
    sort(words.begin(),words.end());

    //Output
    cout << no;
    for(i = 0;i < no-1;i++)//Removing duplicates
    {
        if(words[i] != words[i+1])
            cout << words[i] <<'\n';
    }
    cout << words[no-1];

    return 0;
}

KarstenK

вы должны указать полную ошибку и на какой строке.

[no name]

"Любые предложения и советы приветствуются", узнайте, как использовать отладчик для отладки вашего кода, научитесь задавать вопросы на технических форумах и не ожидайте, что люди со всего мира будут читать ваши мысли.

2 Ответов

Рейтинг:
0

Chris Losinger

uni = temp.substr(start,j-start-1);


похоже, потенциальный выход за пределы.

если j==0, то это будет
temp.substr(0, -1);


jeron1

Я также заметил, что, по-видимому, "string:: NPO" является допустимым 2-м параметром для substr(), и его значение равно -1. Однако я сомневаюсь, что код был написан именно с этой целью.

Рейтинг:
0

Chris Losinger

компиляция и запуск кода, а также предоставление ему" это строка " в качестве входных данных, код утверждает

cout << words[no-1];


потому что слова пусты.

так что, по-видимому, это не "логически и синтаксически правильно".


jeron1

..и нет в этом нет необходимости, так как он всегда равен words.size().