无法查找并替换矢量的所有出现

Cant find and replace all the occurances of the vector

本文关键字:查找 替换      更新时间:2023-10-16
  • 我应该能够使用矢量解码秘密信息。

  • 我已经写出了所有的向量,可以找到出现的第一个实例。

  • 我一次只能找到一个向量。

  • 我应该能够解码像">,$]:"这样的消息(应该拼写为">tops(。

  • 我没有包括整个矢量列表,因为这太长了:

    ...
    sym.at(i)="$"; letr.at(i) = "o"; ++i;
    sym.at(i)="]"; letr.at(i) = "p"; ++i;
    sym.at(i)="}"; letr.at(i) = "q"; ++i;
    sym.at(i)=";"; letr.at(i) = "r"; ++i;
    sym.at(i)=":"; letr.at(i) = "s"; ++i;
    sym.at(i)=","; letr.at(i) = "t"; ++i;
    sym.at(i)="%"; letr.at(i) = "u"; ++i;
    sym.at(i)="<"; letr.at(i) = "v"; ++i;
    sym.at(i)="."; letr.at(i) = "w"; ++i;
    sym.at(i)=">"; letr.at(i) = "x"; ++i;
    sym.at(i)="/"; letr.at(i) = "y"; ++i;
    sym.at(i)="?"; letr.at(i) = "z"; ++i;
    cout << "nEnter decrypted message: "; //asking dycypted message
    cin >> message;
    found = false;
    for (i = 0; i < numCar; ++i) { // find letter index
        if (sym.at(i) == message) {
            found = true;
            cout << "decrypted message is: ";
            cout << letr.at(i) << endl;
        }
    }
    ...
    

无法查找并替换矢量的所有出现:

  • 显然你不能,假设message == ",$]:"——你的for循环中的条件sym.at(i) == message永远不会变成true。因此,永远不会对if子句中的代码进行求值

你怎么能轻松做到

#include <iostream>
#include <string>
#include <algorithm>
int main() {
  std::string sym("$]};:,%<.>/?");
  std::string let("opqrstuvwxyz");
  std::string inpt;
  while (std::getline(std::cin, inpt)) {
    for (std::size_t i(0), ie(inpt.size()); i < ie; ++i) {
      std::size_t idx = std::distance(sym.begin(), std::find(sym.begin(), sym.end(), inpt[i]));
      if (idx < sym.size()) std::cout << let[idx];
    }
    std::cout << std::endl;
  }
  return 0;
}

演示