无法找到并替换所有出现的向量

时间:2014-06-13 15:53:48

标签: c++

  • 我应该能够使用向量解码秘密消息。

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

  • 我也一次只能找到一个矢量。

  • 我应该可以解码像“,$]:”这样的消息(应该拼写为“ 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;
        }
    }
    ...
    

1 个答案:

答案 0 :(得分:0)

无法找到并替换向量的所有出现:

  • 显然,您不能认为message == ",$]:"循环for中的条件sym.at(i) == message永远不会成为true。{li>因此,永远不会评估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;
}

Demo.