将字符串拆分为字符然后返回字符串

时间:2012-03-28 17:26:51

标签: c++ encryption char split

我正在进行简单的c ++聊天,我想用简单的代码加密消息。 所以我认为它会像chars a-x然后它会替换它们例如a -11。 所以它需要

  1. 将邮件拆分为字符
  2. 将字符更改为数字
  3. 按正确的顺序放回来。
  4. 所以有人知道怎么做吗? 谢谢:))

3 个答案:

答案 0 :(得分:2)

一种简单的方法是运行循环并在每次迭代时处理字符。

#include <iostream>
#include <string.h>

using namespace std;    

int main() {    

int num = 3;    //your choice for encryption
int len = 30;   //length of string
char * str = new char[len];
cin>>str;

//encrypt
for (int i = 0; i < strlen(str);i++)
{
    str[i] += num;
}

cout<<str<<endl;
return 0;
}

答案 1 :(得分:1)

std::string会存储char的任意值,让您可以轻松访问各个字符。但是,对于加密,您可能更愿意使用unsigned char,这也非常简单 - std::string只是std::basic_string<char>的typedef,但std::basic_string<unsigned char>非常容易管理。

听起来你想要的是Ceaser密码的顺序,尽管如果你只是“加密”所有东西,而不仅仅是字母,这是最简单的。

std::basic_string<unsigned char> s;

for (int i=0; i<s.length(); i++)
    s[i] += 5;

然后“解密”你只是反其道而行:

for (int i=0; i<s.length; i++)
    s[i] -= 5;

答案 2 :(得分:0)

C ++中的字符串已经是一个字符数组,除非您的聊天程序使用Unicode或其他字符集编码。在这种情况下,事情变得更加复杂,因为字符串可能是网络上新鲜的字节数组(不是字符),也可能是解码后的宽字符数组(wstring)。

但假设您有8位字符的ASCII字符串或32位字符的解码宽字符串,步骤1和2非常简单。第1步是为您完成的。您应该能够使用数组索引访问每个字符,例如mystring[1]mystring[2]。第2步很简单,因为字符数字。只需对字符值进行数学运算即可。您可以添加,减去或乘以:您喜欢的任何内容。请注意,8位字符的值可能介于-128到+127之间。

字符串的顺序在字符串中不会改变。所以只需将它们留在原地。

如果您的编码方法更改了字符串的长度,那么您将需要创建该字符串的新副本。最好的方法是在你做数学的时候。在C ++中,使用push_back方法将新字符添加到新字符串的“后面”。