C ++ : 빈 배열의 첫 번째 인덱스는 주어진 문자를 .resize ()로 채우지 않지만 다음의 다른 모든 문자는

user4422282

저는 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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관