如何使用string.at为其赋值

时间:2016-03-04 00:00:05

标签: c++ string

我的程序的目标是从用户输入的字符串输出新密码。我遇到的问题是根据用户输入分配值,我不能使字母等于数字。我想避免使用" char"分配它。

例如:当用户输入一个字母,例如b时,它应该具有2的数字值,并且会打印出2。或者,用户输入cab,这将打印出312

#include <iostream>
#include <string>

using namespace std;

int main(){

string password; 
cin >> password;
password.at()

while (password != "\n")

if (password == a || password == A)
{
    password = 1;
}
else if (password == b || password == B)
{
    password = 2;
}
else if (password == c || password == C)
{
    password = 3;
}

cout << password;

return 0;
}

2 个答案:

答案 0 :(得分:1)

在C ++ 11中,可以使用:

for (auto const & char: password) {
  switch (char) {
    case 'a': case 'A': std::cout << '1'; break;
    case 'b': case 'B': std::cout << '2'; break;
    case 'c': case 'C': std::cout << '3'; break;
    default: /* Do something else */ break;
  };
}

或者在早期版本的C ++中:

for (std::size_t i = 0u; i < password.size(); ++i) {
  switch (password[i]) {
    case 'a': case 'A': std::cout << '1'; break;
    case 'b': case 'B': std::cout << '2'; break;
    case 'c': case 'C': std::cout << '3'; break;
    default: /* Do something else */ break;
  };
}

答案 1 :(得分:0)

#include <cctype>
#include <iostream>
#include <string>

int main() {
    std::string password;

    if (std::getline(std::cin, password))
    {
        for (const auto character : password)
        {
            if (std::isalpha(character))
            {
                const auto integral_value =
                    static_cast<int>(std::tolower(character) - 'a') + 1;
                std::cout << integral_value;
            }
        }

        std::cout << std::endl;
    }

    return 0;
}