#include<iostream>
#include<conio.h>
#include<math.h>
#include<vector>
#include<iterator>
#include<string>
using namespace std;
int main() {
int k=0;
string s;
cout<<"string ";
getline(cin,s); //taking in a string from the user
float n=s.size(); //storing size of string
int f=floor((sqrt(n))); //floor of square root of input string
int c=ceil((sqrt(n))); //ceiling
int m=f*c; //storing product of f and c
vector< vector<string> > vec(n<=m?f:++f, vector<string>(c)); //makes a 2d vector
//depending on user's
//string length
for(int i=0;n<=m?i<f:i<++f;i++) //looping acc to user's input and assigning
{
for(int j=0;j<c;j++) //string to a matrix
{
if(k<s.size())
{
vec[i][j]=s[k];
k++;
}
}
}
for(int j=0;j<c;j++) //printing the vector
{
{
for(int i=0;n<=m?i<f:i<++f;i++)
cout<<vec[i][j];
}cout<<" ";
}
getch();
}
对于长度为8个字符的字符串,它不适用于n&gt; m,因此它会生成2 * 3的向量,因此无法将整个字符串包含在矩阵中,这就是为什么我使用三元素来制作向量当遇到像这样的情况时更大的尺寸。 那么我做错了什么?
我只会写完整个问题。
One classic method for composing secret messages is called a square code. The spaces are removed from the english text and the characters are written into a square (or rectangle). The width and height of the rectangle have the constraint,
floor(sqrt(word)) <= width, height <= ceil(sqrt(word))
The coded message is obtained by reading down the columns going left to right. For example, the message above is coded as:
imtgdvs fearwer mayoogo anouuio ntnnlvt wttddes aohghn sseoau
Sample Input:
chillout
Sample Output:
clu hlt io
答案 0 :(得分:2)
这不会解决您的整个问题,但我仍然觉得这很重要。你似乎误解了三元的运作方式。让我们在这里观察它的一个用途:
for (int i = 0; n <= m ? i < f : i < ++f; i++) {}
// ^^^^^^^^^^^^^^^^^^^^^^^^ <--- not the intended outcome
这不起作用,因为三元的返回侧不“粘贴”本身就位。换句话说,i < f
和i < ++f
都不会直接放入for循环中。相反,它会给你一个值。
要了解它的确在做什么,您首先需要了解三元是另一种做if-else的方法。上面的三元组,if-else形式,看起来像这样:
if (n <= m)
i < f; // left side of the ":"
else
i < ++f; // right side of the ":"
让我们进一步分解:
i < f
这是i
和f
的小于比较。因此,根据各个值,您将收到0(假)或1(真)。
因此,在你的for循环中,会发生这种情况:
for (int i = 0; 1; i++) {}
// ^ <--- if comparison returns true
for (int i = 0; 0; i++) {}
// ^ <--- if comparison returns false
因此,对于您的示例,您需要在循环之前找到f
的值。您可以使用该部分的三元组,但前提是您理解它。否则,使用另一种方法查找f
(预期的数值)。一旦找到它,然后就可以将i < f
放入for循环中。