Problem p00017 (C++) — buggy submission, verdict: Runtime Error

#include <iostream>
#include <sstream>
#include <string>
#include <vector>
int main() {
  std::vector<std::string> result;
  for (std::string s; std::getline(std::cin, s);) {
    int delta = 0;
    std::stringstream ss;
    ss << s;
    while (!ss.eof()) {
      std::string temp;
      ss >> temp;
      if (temp.length() == 3 && temp[0] != '.' && temp[1] != '.' &&
          temp[2] != '.') {
        int d1 = temp[0] - 't';
        int d2 = temp[1] - 'h';
        int d3 = temp[2] - 'e';
        for (auto i : {&d1, &d2, &d3}) {
          if (*i < 0) {
            *i += 26;
          }
        }
        if (d1 == d2 && d2 == d3) {
          delta = temp[0] - 't';
          break;
        }
      } else if (temp.length() == 4 && temp[0] != '.' && temp[1] != '.' &&
                 temp[2] != '.' && temp[3] != '.') {
        int d1 = temp[0] - 't';
        int d2 = temp[1] - 'h';
        int d3 = temp[2] - 'i';
        int d4 = temp[3] - 's';
        for (auto i : {&d1, &d2, &d3, &d4}) {
          if (*i < 0) {
            *i += 26;
          }
        }
        if (d1 == d2 && d2 == d3 && d3 == d4) {
          delta = temp[0] - 't';
          break;
        }
        d1 = temp[0] - 't';
        d2 = temp[1] - 'h';
        d3 = temp[2] - 'a';
        d4 = temp[3] - 't';
        for (auto i : {&d1, &d2, &d3, &d4}) {
          if (*i < 0) {
            *i += 26;
          }
        }
        if (d1 == d2 && d2 == d3 && d3 == d4) {
          delta = temp[0] - 't';
          break;
        }
      }
    }
    result.push_back(std::string(s.length(), 'a'));
    for (int i = 0; i < s.length(); i++) {
      result.back()[i] =
          'a' <= s[i] && s[i] <= 'z' ? (s[i] - delta - 'a') % 26 + 'a' : s[i];
    }
  }
  for (auto i : result) {
    std::cout << i << std::endl;
  }
  return 0;
}


Error: 0

Fixed submission:

#include <iostream>
#include <string>
#include <vector>
int main() {
  std::vector<std::string> result;
  for (std::string str; std::getline(std::cin, str);) {
    char delta;
    for (int i = 0;; i++) {
      if (str[i] != ' ' && str[i] != '.' && str[i + 1] != ' ' &&
          str[i + 1] != '.' && str[i + 2] != ' ' && str[i + 2] != '.') {
        int d1, d2, d3;
        d1 = (int)(str[i] - str[i + 1]);
        if (d1 < 0) {
          d1 += 26;
        }
        d2 = (int)(str[i + 1] - str[i + 2]);
        if (d2 < 0) {
          d2 += 26;
        }
        if (d1 == 't' - 'h') {
          if (d2 == 'h' - 'e') {
            delta = str[i] - 't';
            break;
          } else {
            if (str[i + 3] != ' ' && str[i + 3] != '.') {
              d3 = (int)(str[i + 2] - str[i + 3]);
              if (d3 > 0) {
                d3 -= 26;
              }
              if (d2 == 'h' - 'i' && d3 == 'i' - 's' ||
                  d2 == 'h' - 'a' && d3 == 'a' - 't') {
                delta = str[i] - 't';
                break;
              }
            }
          }
        }
      }
    }
    result.push_back(std::string(str.length(), '0'));
    for (int i = 0; i < str.length(); i++) {
      result.back()[i] = str[i] != ' ' && str[i] != '.'
                             ? (str[i] - delta - 'a') % 26 + 'a'
                             : str[i];
    }
  }
  for (auto i : result) {
    std::cout << i << std::endl;
  }
  return 0;
}