AOJ 0017再チャレンジ失敗

前回のコードは少し思い当たる節があったので、1から書きなおしてみたが、これがまたRuntime Errorだとかよく分からないエラーを吐く。もうはやここまでくるとお手上げ感がある。

#include <cstdio>
#include <vector>
#include <string>
using namespace std;
int main(){
	while(1){
		vector<string> v;
		string s;
		char c, f = 1;
		int i, j, k, vl, vsl, o = 0;
		while(f){
			switch(c = getchar()){
				case ' ':
				case '.':
					if(s.size()) v.push_back(s);
					v.push_back(s = c);
					s = "";
					break;
				case '\n':
					if(s.size()) v.push_back(s);
					f = 0;
					break;
				case EOF:
					return 0;
				default:
					s += c;
			}
		}
		vl = v.size();
		for(i = 0, vsl = v[i].size(); i < vl; vsl = v[++i].size()){
			if(vsl == 3)
				for(j = -127; j <= 128 && !o; j++, o=(s=="the"?j-1:0)){
					s = v[i];
					for(k = 0; k < 3; k++) s[k] += j;
				}
			else if(vsl == 4)
				for(j = -127; j <= 128 && !o; j++, o=(s=="this"||s=="that"?j-1:0)){
					s = v[i];
					for(k = 0; k < 4; k++) s[k] += j;
				}
			if(o) break;
		}
		for(i = 0; i < vl; i++)
			if(v[i] == "." || v[i] == " ") putchar(v[i][0]);
			else for(j = 0; j < v[i].size(); j++) putchar(v[i][j] + o);
		putchar(10);
	}
	return 0;
}