저는 C ++를 처음 사용하므로 이것이 기본이라면 용서해주십시오.
아래에 기본 암호화 알고리즘이 있습니다. 문자열 'text'의 첫 번째 인덱스의 암호화 된 출력이 문자열 'cipher'에 추가되지 않는 것을 제외하고는 모든 것이 일반적으로 정상적으로 작동합니다. 첫 번째 뒤에 오는 모든 색인이 추가됩니다.
이것에 대한 아이디어가 있습니까?
암호:
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
int main()
{
string text = "Do not worry about your difficulties in Mathematics. I can assure you mine are still greater.";
string cipher;
int tSize = text.size();
int cSize = cipher.size();
for (int i = 0; i < tSize; i++)
{
if (isalpha(text[i]))
if (isupper(text[i]))
{
if (text[i] < 'V') cipher.resize(cSize++, text[i] + 4);
else cipher.resize(cSize++, text[i] - 22);
}
else
{
if (text[i] < 'v') cipher.resize(cSize++, text[i] + 4);
else cipher.resize(cSize++, text[i] - 22);
}
else cipher.resize(cSize++, text[i]);
}
cout << cipher << endl;
}
산출
s rsx asvvc efsyx csyv hmjjmgypxmiw mr Qexliqexmgw. M ger ewwyvi csy qmri evi wxmpp kviexiv.
미리 감사드립니다!
문제는 변수 cSize
가 처음에는 0이고 크기를 조정할 때 사후 증분 을 사용 한다는 것 cipher
입니다.
사후 증분은 증분 이전의 값인 이전 값을 반환합니다 . 즉,에 대한 첫 번째 호출 resize
은 크기가 0 인 문자열의 크기를 조정합니다.
간단한 해결책은에서 와 같이 사전 증분을 ++cSize
대신 사용하는 것입니다. 또는로 초기화 cSize
하십시오 1
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다