在我尝试提出任何要求之前,我会尽量把事情弄清楚。 所以我目前正在高中学习作为一名程序员。最近我的老师要求我在 RAD Studio XE3 中创建一个 VCL 表单应用程序,有点像 C 程序,但只有表单和东西。
我必须创建矩阵 N*M(最终是二维字符数组)并在其中存储拉丁字符。然后我不得不用插入排序方法对它进行排序。所以到目前为止我所做的是,我定义了数组,我创建了一个 StringGrid1,从中读取这些字符。我将它们存储到二维字符数组中,但对我来说最难的是让它按字母顺序对这些字符进行排序,但我不必将所有内容排序在一起,只需将每一行单独排序,然后使最终更改显示回 StringGrid1(这不是问题所在)。
正如我之前所说,我在使这类事情发挥作用时遇到了一些重大困难。我已经浏览了十亿个例子,在谷歌上搜索了像 solid AGE。如果这些是整数值,那就没什么了,但我什至无法忍受 C 讨厌 String 值。
我的程序:
http://i.stack.imgur.com/Brx9X.jpg
这就是我设法从 StringGrid1 中读取字符并将它们存储到数组 [i][j] 中的方法。 mmax 和 nmax 用于告诉读取多远,因为用户可以自己选择行数和列数。
for(int i=0; i < mmax; i++) //Rindas (kolonnas)
{
for(int j=0; j < nmax; j++) //Kolonnas (rindas)
{
char * temp = (char*)(StringGrid1->Cells[i][j]).c_str(); //Nolasam no Edit lauka char elementu
array[i][j] = temp[0]; //Piešķiram masīvam šo elementu
ListBox1->Items->Add(array[i][j]); //Ierakstam ListBox1 masīva elementu
Button3->Enabled = False;
Button6->Enabled = True;
}
}
StringGrid1->Options = StringGrid1->Options >> goEditing; //Neatļauj lietotājam rediģēt StringGrid1 laukus
那么,现在该怎么做了……我该怎么做?我没有线索了。 one sort chars from 2-D 如何让每一行单独排序,例如有 5 行,每一行都被逐一排序。
最佳答案
首先,您没有正确填充数组。这一行:
char * temp = (char*)(StringGrid1->Cells[i][j]).c_str();
获得临时 String
来自 Cells
的实例属性,通过其 c_str()
获取指向其内部数据的指针方法,然后释放 String
当它超出范围时,指针悬空,因此它在此行无效:
array[i][j] = temp[0];
您的数组碰巧以正确的字符值结尾,但这只是因为 String
的内部数据被引用计数,TStringGrid
仍然有对原始 String
的有效引用值,所以 String
数据还没有从内存中物理释放,所以你的 temp
指针仍然指向仍然存在的原始内存,但这是您不应依赖的实现细节。
改用这个:
String temp = StringGrid1->Cells[i][j];
array[i][j] = temp[1]; // or temp.c_str()[0]
或者这个:
array[i][j] = StringGrid1->Cells[i][j][1]; // or StringGrid1->Cells[i][j].c_str()[0]
现在,话虽如此,实际的排序逻辑相当简单,特别是如果您使用 STL 为您进行实际的排序,例如:
#include <algorithm>
for(int i=0; i < mmax; i++)
{
std::sort(&(array[i][0]), &(array[i][nmax]));
}
如果您需要对排序进行更多控制,可以使用自定义比较函数:
#include <algorithm>
bool my_compare(char a, char b)
{
// return true if the first argument is less than the second, otherwise return false.
}
for(int i=0; i < mmax; i++)
{
std::sort(&(array[i][0]), &(array[i][nmax]), my_compare);
}
关于c - 在 RAD Studio XE3 中按字母顺序对二维字符数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14952444/