0

私は、標準入力を読み取り、EOF に遭遇するまでテキストを保存し、Caesar Block Cipher を使用してテキストを暗号化するプログラムを作成する任務を負っています。

解決へのステップ:

  1. したがって、メッセージを大きなバッファまたは文字列オブジェクトに読み込みます。
  2. スペースと句読点を削除するかどうか
  3. 次に、メッセージ内の文字を数えます。
  4. メッセージの長さよりも大きい最初の完全な正方形を選択し、そのサイズの char の配列を割り当てます。
  5. 左から右、上から下に、そのサイズの正方配列にメッセージを読み取ります。
  6. メッセージを上から下、左から右に書き出すと、暗号化されます。

これは私がこれまでに持っているものです...コンパイルはしますが、何もしません。私は何かが欠けているに違いないことを知っています。どんな助けでも大歓迎です。

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cstdlib>
#include <fstream>
#include <ctype.h>
#include <cstring>
#include <cmath>
#include <string>
using namespace std;

int main()
{
    // read in char from keyboard
    string buff;
    do
    {
        cin >> buff;
    } while ( ! cin.eof()) ;

    // delete spaces and punctuation
    for ( int i = 0 ; i < sizeof ( buff ) ; i++ )
    {
        if  ( !isalnum ( buff[i] )  )
        {
            buff.erase( i,1 );
            --i;
        }
    }

    // get length of edited string
    int static SIZE = buff.length(); //strlen (buff);

    // pick first perfect _square_ greater then the message length (ex:7x7)
    int  squared = static_cast <int> ( sqrt( static_cast <double> ( SIZE )) + .5f );

    // allocate an array of char that size
    char ** board;
    board = new char *[squared];      // array of 'squared' char pointers
    for ( int i = 0 ; i < squared ; i++ )
        board[i] = new char[squared];

    // read messsage into a square array of that size from left to right top to bottom
    for ( int c = 0 ; c < squared  ; c++ )
        for ( int r = 0 ; r < squared ; r++ )
            buff[r] = board[r][c];

    // write the message out top to bottom, left to right and its been encyphered
    for ( int r = 0 ; r < squared  ; r++ )
        for ( int c = 0 ; c < squared ; c++ )
            cout << board[r][c] << endl;

    // delete array
    delete [] board;
    for ( int i = 0 ; i < squared ; ++i )
        delete [] board[i] ;

} // end main
4

2 に答える 2

0

これは奇妙です

string buff;
do
{
    cin >> buff;
} while ( ! cin.eof());

それが何を達成すると思うかはわかりません。なぜこれだけではないのですか?

string buff;
cin >> buff;

別のエラー

for ( int i = 0 ; i < sizeof ( buff ) ; i++ )

する必要があります

for ( int i = 0 ; i < buff.length() ; i++ )

数行後にこれが正しくなったので、なぜここで間違っているのかわかりません。

于 2013-04-07T21:30:26.350 に答える