C ++根据用户输入字符串长度创建二维数组
Posted
技术标签:
【中文标题】C ++根据用户输入字符串长度创建二维数组【英文标题】:C++ creating a two-dimensional array based on user input string length 【发布时间】:2012-11-09 05:05:24 【问题描述】:我有一个任务是创建一个块转置密码程序。用户输入他们选择的短语,程序将去除短语中的空格、标点符号,并将其变为小写,然后读取其长度并创建一个二维数组,该数组的大小与最近的正方形一样大,适合所有的变异字符串中的字符,并用随机字母填充剩余空间。
问题是,我在创建那个正方形时遇到了问题。
到目前为止我有这个:
int main()
string input;
cout << "Please enter message to cipher." << endl;
getline(cin, input);
/* do punctuation removal/mutation */
int strLength = input.length(); //after mutation
/* need to find the square here before applying sizes and values to arrays */
char * original = new char[][]; // sizes pending
char * transposed = new char[][]; // sizes pending
for (int i = 0; i <= /* size pending */ ; i++)
for (int j = 0; j <= /* size pending */ ; j++)
transposed[j][i] = original[i][j];
/* do more stuff here */
有什么想法吗?
(我已经完成了突变部分;使用备用代码进行了测试)
【问题讨论】:
不会是char ** original
吗?
【参考方案1】:
你不能这样做,例如
char * original = new char[][];
首先,您尝试创建一个数组数组(或指针的指针)并将其分配给单个指针。您需要分两步完成:
分配“外部”数组:
char **original = new char* [size];
分配“内部”字符串:
for (int i = 0; i < size; i++)
original[i] = new char [other_size];
但是我强烈建议反对使用它!相反,您应该使用std::vector
而不是在堆上分配的“数组”,如果内容是字符串,则使用std::string
:
std::vector< std::vector< std::string > > original;
【讨论】:
【参考方案2】:您可以取长度的平方根,四舍五入为整数,然后加一得到新的长度。
int len = (int)(sqrt(strLength) + 1e-9) + 1;
然后您将使用len
来malloc
正方形并像往常一样填充。
【讨论】:
【参考方案3】:我相信您不需要“新”来创建您的存储。以下代码应该可以完成这项工作:
char buf[size][size]; // size is a variable
... // populate your buf
char tmp;
for(int i = 0; i < size; i++)
for(int j = 0; j < i; j++)
tmp = buf[i][j];
buf[i][j] = buf[j][i];
buf[j][i] = tmp;
这会就地进行转置。您不需要另一个数组来存储字符。
【讨论】:
以上是关于C ++根据用户输入字符串长度创建二维数组的主要内容,如果未能解决你的问题,请参考以下文章
c语言实现用户指令实现 用户输入字符串 然后根据要求执行 怎么做呢
1使用PHP的排序函数对以下中的数组排序。 2.在表单上由用户输入学号,姓名和成绩这三列的数据,一共5行。