2013-04-06 81 views
2

我读过Bjarne Stroustrup编写的“C++编程语言”一书,他的一个练习是做一个简单的加密。我输入东西,用std :: cin读取并加密它并将加密的文本打印到屏幕上。这是我做的:C++简单加密

在我INT主要()

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; 

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

有没有其他的方法呢?

+2

如果C++ 11正常,'new_r + = {r [i],'_'};'。这需要一个由字符和下划线组成的初始化程序列表(想想数组初始化),并将其添加到字符串的末尾。 – chris 2013-04-06 20:46:51

+0

你可以得到a的个数并计算其他人 – Bakudan 2013-04-06 20:48:03

+0

@Bakudan,除非它们不保证是连续的。 – chris 2013-04-06 20:48:28

回答

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(); 

输出:

S_o_m_e_t_h_i_n_g_i_n_t_h_e_w_a_y_s_h_e_m_o_v_e_s_。 _。 _。 _

+0

'+ ='可以采用单个字符,与构造函数不同,所以'new_r + = r [i];'起作用。 – chris 2013-04-06 20:52:31

4

有ofcourse另一种方式:

new_r += std::string(1,r[i]) + "_"; 
3

如果使用范围,对,它的清洁:

std::string new_r; 
for (char c : r) { 
    new_r += c; 
    new_r += '_'; 
}