findを使うときは、size_t型を使おうねって話と、string::nposも必需品って話
サンプルコード
#include <iostream> #include <string> using namespace std; int main() { string alpha {"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"}; string key {"XHAGSJSKCUENCKECSLSASDASDAaskdfjafjaaejnvnjeknvjsdnv"}; string original_m; string encrypt_m; cout << "Enter your message..." << endl; getline(cin,original_m); for (char c: original_m) { size_t pos = alpha.find(c); cout << c << endl; cout << alpha.find(c) << endl; cout << pos << endl; if (pos != string::npos) { encrypt_m += (key.at(pos)); //encrypt_m.push_back(key.at(pos)); } else { encrypt_m += c; //encrypt_m.push_back(c); } } cout << "Encrypted message is..." << endl; cout << encrypt_m << std::endl; return 0; }
上記のコードで、size_tではなく、intとかでposを見つけちゃおうとしたり、alpha.find(c)の値をそのまま使おうとすると、意味不明な値が入ってout of rangeになっちゃいます。
ちゃんと
size_t pos = alpha.find(c);
の一文を使って
if (pos != string::npos) {
で条件分岐を!