Разделение строки на символы, а затем обратно на строку - PullRequest
1 голос
/ 28 марта 2012

Я делал простой чат на С ++ и хотел зашифровать сообщения с помощью простого кода. Поэтому я подумал, что это будет похоже на символ a-x, а затем он заменит их, например -11 Так что надо бы

  1. Разделить сообщение на символы
  2. Измените символы на число
  3. Поместите их обратно в правильном порядке.

Так кто-нибудь знает, как это сделать? Спасибо:)

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Простой способ сделать это - запустить цикл и обрабатывать символы на каждой итерации.

#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 голос
/ 28 марта 2012

std::string будет хранить произвольные значения char и позволит вам легко получить доступ к отдельным символам. Для шифрования, однако, вы можете предпочесть работать с unsigned char, что тоже довольно просто - std::string это просто определение типа для std::basic_string<char>, но 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;
0 голосов
/ 28 марта 2012

Строка в C ++ уже является массивом символов, если ваша программа чата не использует Unicode или другую кодировку набора символов. В этом случае все становится намного сложнее, потому что строка может быть байтовым массивом, свежим из сети (не символами), или массивом декодированных широких символов (строка wstring).

Но при условии, что у вас есть либо строка ASCII из 8-битных символов, либо декодированная широкая строка из 32-битных символов, шаги 1 и 2 довольно просты. Шаг 1 сделан для вас. Вы должны иметь возможность доступа к каждому символу, используя индекс массива, например mystring[1], mystring[2]. Шаг 2 прост, потому что символы являются числами. Просто сделайте свою математику на значении персонажа. Вы можете добавлять, вычитать или умножать: все что угодно. Имейте в виду, что 8-битный символ, вероятно, имеет диапазон значений от -128 до +127.

Порядок символов в строке не меняется. Так что просто оставьте их на месте.

Если ваш метод кодирования изменяет длину строки, вам нужно будет создать новую копию строки. Лучший способ сделать это, пока вы занимаетесь математикой. В C ++ используйте метод push_back, чтобы добавить новый символ в «конец» новой строки.

...