gpt4 book ai didi

c++ - 我的程序只处理输入中的一行

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:55:33 25 4
gpt4 key购买 nike

我正在做一个凯撒 block 密码。解决方案的一般步骤是:

  • 将消息读入大缓冲区或字符串对象。

  • 是否删除空格和标点符号(对于如果你这样做,敌人就会阅读)。

  • 然后统计消息中的字符数。

  • 选择第一个大于消息长度的完美平方,
    分配一个该大小的 char 数组。

  • 将消息从左到右读入该大小的方形数组,从上到下。

  • 将消息从上到下、从左到右写下来
    将其加密。

我的代码:

#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
#include <ctype.h>
#include <cmath>
#include <functional>
#include <numeric>
#include <algorithm>
#include <locale>

using namespace std;

int main(int argc, char *argv[])
{

int length = 0;

cout << "Enter a string: ";

string buffer;
char buff[1024];

while (getline(cin, buffer))
{
buffer.erase(remove_if(buffer.begin(), buffer.end(), not1(ptr_fun(::isalnum))), buffer.end());
break;
}

length = buffer.length();
int squareNum = ceil(sqrt(length));

strcpy(buff, buffer.c_str());

char** block = new char*[squareNum];
for(int i = 0; i < squareNum; ++i)
block[i] = new char[squareNum];

int count = 0 ;

for (int i = 0 ; i < squareNum ; i++)
{
for (int j = 0 ; j < squareNum ; j++)
{
block[i][j] = buff[count++];
}
}

for (int i = 0 ; i < squareNum ; i++)
{
for (int j = 0 ; j < squareNum ; j++)
{
cout.put(block[j][i]) ;
}
}

return 0;

}

在大多数情况下,它是有效的。我遇到的问题是有多于一行的输入。

Ex. 1 
this is sample text suitable for a simulation of a diplomatic mission or a spy's instructions

Ex. 2
this is sample text suitable
for a simulation of a diplomatic
mission or a spy's instructions

示例 1 有效而示例 2 无效,因为有多行。我感觉它与 while(getLine) 函数有关,但我不知道到底要更改什么。

最佳答案

“while”循环内的这个“break”——它在第一次“getline”调用后中断循环。这就是为什么你只有一行。

关于c++ - 我的程序只处理输入中的一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987042/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com