gpt4 book ai didi

c++ - 加密数组随机给任意垃圾

转载 作者:行者123 更新时间:2023-11-28 01:40:53 25 4
gpt4 key购买 nike

所以,我有一个项目,我必须从 cin 输入一个字符串到一个奇数数组,然后从中心开始,顺时针“旋转”并打印加密消息。

在大多数情况下,我都能正常使用它。但是,它会为某些输入打印任意垃圾,我不明白为什么。大多数“有问题的”输入似乎都有 * 和空格,但即使是一些更简单的输入也会给我带来问题。

一些“坏例子”是:

"* * ** * * ** * ** ***  ** ** **"
"**************************************************************************************"
"********** "
"hello world how are you doing?"

(“” 在尝试运行它们时被遗漏了,我只是将他放在那里以便您可以看到每个测试的开始和结束)

到目前为止,这是我的代码:

#include <iostream>
#include <string>
#include <cmath>
#include <cstdlib>

using namespace std;

int main()
{
string message;
int direction=0; //right = 0, down = 1, left = 2, up = 3
int n, size, i = 0;
char data[33][33];
int x, y;
int stepCount=1, numStep =0;


getline(cin, message);
n = message.size();

size = sqrt(n);

x = y = size/2 + 0.5;

if(size*size < n){
size++;
}
if(size%2 == 0){
size++;
}

for(int r=0; r < size; r++){
for(int c=0; c < size; c++){
data[r][c] = message[i];
if(!message[i]){
data[r][c] = '*';
}
i++;
}
}

for(int a=0; a<size*size; a++){
cout << data[x][y];



switch(direction){
case 0: y += 1;
break;
case 1: x+= 1;
break;
case 2: y -= 1;
break;
case 3: x -= 1;
break;
}


numStep++;
if(numStep == stepCount){
direction = (direction+1)%4;
numStep = 0;
}
if(x == y){
stepCount++;
}


}

return 0;
}

最佳答案

填充data[r][c]的循环可以访问message不存在的元素,因为size*size会更大比 message.size() 如果递增 size 的任一条件为真。您需要检查 i 是否在消息之外。

if (!message[i]) 不是检查这个的正确方法;当i > message.size()时,message[i]的结果未定义,不是false

for(int r=0; r < size; r++){
for(int c=0; c < size; c++){
data[r][c] = i < n ? message[i] : '*';
i++;
}
}

关于c++ - 加密数组随机给任意垃圾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47213880/

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