Нужно убрать первый символ строки

277
05 октября 2017, 13:36

Есть программа, которая в цикле сравнивает строки, всё в ней работает, но в итоге превышается тайм лимит на 0,001 - 0,007 секунды. Решил с каждой итерацией отсекать первый символ, для ускорения работы цикла, но как это сделать?! P.S. Длина строки может достигать 100,000 символов.

Код:

#include <fstream>
#include <cstring>
std::ofstream cout("output.txt");
std::ifstream cin("input.txt");
int main() {
   char e[100002] , m[100002] , s[100002];
   int l ;
   cin >> e ;
   cin >> m ;
   cin >> s ;
   l = strlen(e);
   for (int i=0; i <= l ;i++) {
   if (strncmp(m,e,i) != 0 || strncmp(s,e,i) != 0 ) {
        if (strncmp(m,e,i) == 0 && strncmp(s,e,i) != 0 ) { cout << "Masha";
            break; }
        if (strncmp(m,e,i) != 0 && strncmp(s,e,i) == 0 ) { cout << "Sasha";
            break; }
        if (strncmp(m,e,i) != 0 && strncmp(s,e,i) != 0 ) { cout << "Draw";
            break; }
        break;
   }
else { continue;}
}
return 0;
}
Answer 1

Нужно инкрементировать указатели. m указывает на начало строки, а после m++ уже на второй символ и так далее. и все время сравнивать 1 символ. То есть

for (int i=0; i < l ;i++) {
   if (m[i]!= e[i] || s[i] != e[i] ) {
        if (m[i]== e[i] && s[i] != e[i] ) { cout << "Masha";
            break; }
        if (m[i]!= e[i] && s[i] == e[i]) { cout << "Sasha";
            break; }
        if (m[i]!= e[i] && s[i] != e[i] ) { cout << "Draw";
            break; }
        break;
   }
//else быть не может    
}
Answer 2

Делай сравнение только 1 раз:

for (int i=0; i <= l ;i++) 
{
    int m_e_i = strncmp(m,e,i);
    int s_e_i = strncmp(s,e,i);
    if (m_e_i != 0 || s_e_i !=0 ) 
    {
        if (m_e_i == 0 && s_e_i !=) {}
        ...
        ...
    }
}
READ ALSO
Как сделать таймер на C++

Как сделать таймер на C++

Делаю игру змейку, изучая ООП C++, и есть код:

323
Считывание unicode

Считывание unicode

Имеется адрес в котором хранится строка в UTF-16Вопрос как ее нормально считать в массив char с помощью ReadProcessMemory? Я пытался вот так:

264
Ошибки со структурой С++

Ошибки со структурой С++

Здравствуйте, у меня есть бинарный файл где находятся int значения, каждый из которых занимает 4 байтаЯ хочу с помощью данной структуры пройти...

269
Конвертация кириллицы из QByteArray в QString

Конвертация кириллицы из QByteArray в QString

Доброго времени суток!

365