2

我阅读了 Bjarne Stroustrup 的《The C++ Programming Language》一书,他的一个练习是进行简单的加密。我输入一些东西,用 std::cin 阅读并加密它+将加密的文本打印到屏幕上。我就是这样做的:

在我的int main()中:

std::string read;
std::cin >> read;

encript(read);

我的功能(只是一部分):

void encript(const std::string& r){

std::string new_r;
for(int i = 0; i <= r.length(); i++)
{
    switch(r[i])
    {
        case 'a':
            new_r += "a_";
            break;
        case 'b':
            new_r += "b_";
            break;
        case 'c':
            new_r += "c_";
            break;
        case 'd':
            new_r += "d_";
            break;
... //goes on this way 
    }
}

std::cout << new_r << std::endl;

我现在的问题是我真的必须写下每一个字符吗?我的意思是这些只是非大写字符。还有特殊字符、数字等。

还有另一种方法吗?

4

3 回答 3

4

当然还有另一种方式:

new_r += std::string(1,r[i]) + "_";
于 2013-04-06T20:47:00.413 回答
4

如果你使用 range-for,它会更干净:

std::string new_r;
for (char c : r) {
    new_r += c;
    new_r += '_';
}
于 2013-04-06T20:51:23.333 回答
3

这将是相同的:

void encript(const std::string& r){

std::string new_r;
for(int i = 0; i < r.length(); i++) // change this too
{
    new_r += r[i];
    new_r += "_";
}

std::cout << new_r << std::endl;

您也可以只使用STL。不必使用 C++11:

string sentence = "Something in the way she moves...";
istringstream iss(sentence);
ostringstream oss;

copy(istream_iterator<char>(iss),
     istream_iterator<char>(),
     ostream_iterator<char> (oss,"_"));

cout<<oss.str();

输出:

东西在她移动的方式_。_。_。_

于 2013-04-06T20:52:11.430 回答