指针数组,与字符串按字符大小排序问题。

BeerGates 2008-07-12 04:21:18

void Sort(char *pstr[], int n)
{
char *temp;
int i, j, k;
for(i = 0; i < n - 1; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(strcmp(pstr[k], pstr[j]) > 0)
k = j;
if(k != i)
{
temp = pstr[i];
pstr[i] = pstr[k];
pstr[k] = temp;
}
}
}
}

void Output(char *pstr[], int n)
{
for(int i = 0; i < n; i++)
cout<<pstr[i]<<endl;
}

int main(int argc, char *argv[])
{
char *pstr[5] = {"BASIC", "FORTRAN", "C++", "PASCAL", "COBOL"};
Sort(pstr, 5);
Output(pstr, 5);
return 0;
}

结果:
BASIC
C++
COBOL
FORTRAN
PASCAL
Press any key to continue . . .


这个程序我不明白。在函数中,不能企图通过改变形参指针变量的值而使实参指针变量的值改变。

strcmp是对比字符串大、小、等于。但不是对比字符串前边的字符大小吧?

请各位解释一下这个程序。写些注释出来,我看不明白,为什么可以这样做法?用strcmp?
...全文
333 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
AaBbCc_6 2012-10-19
  • 打赏
  • 举报
回复
void Output(char *str[], int n)
{
for(int i = 0; i < n; i++)
cout<<str[i] <<endl;
}
//冒泡排序
void sort(char *str[],int n)
{
char *temp;
int i, j, k;
for(i=0; i<n; i++)
for(j =0; j<n-i; j++)
if(strcmp(str[j], str[j+1]) > 0)
{
temp = str[j];
str[j] = str[j+1];
str[j+1] = temp;
}
}
//选择排序
void Sort(char *str[], int n)
{
char *temp;
int i, j;
for(i = 0; i < n - 1; i++)
for(j = i + 1; j < n; j++)

if(strcmp(str[i], str[j]) > 0)
{
temp = str[i];
str[i] = str[j];
str[j] = temp;
}
}

void main ()
{
char *str[5] = {"BASIC", "FORTRAN", "C++", "PASCAL", "COBOL"};
Sort(str, 5);
Output(str, 5);
return 0;

}
dba_1984 2008-07-12
  • 打赏
  • 举报
回复
void Sort(char *pstr[], int n)
{
char *temp;//定义一个临时的指向字符串的指针
int i, j, k;
//选择排序
for(i = 0; i < n - 1; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(strcmp(pstr[k], pstr[j]) > 0) //pstr[k] 和 pstr[j] 都是地址,strcmp 比较它们指向的字符串的值
k = j;
if(k != i)
{
//这里交换的是地址,也就是改变指针的指向,字符串本身没有变。
temp = pstr[i];
pstr[i] = pstr[k];
pstr[k] = temp;
}
}
}
}

void Output(char *pstr[], int n)
{
for(int i = 0; i < n; i++)
cout<<pstr[i]<<endl;
}

int main(int argc, char *argv[])
{
char *pstr[5] = {"BASIC", "FORTRAN", "C++", "PASCAL", "COBOL"}; //定义指向字符串的指针数组
Sort(pstr, 5); //传人指针数组的首地址
Output(pstr, 5);
return 0;
}
gths123 2008-07-12
  • 打赏
  • 举报
回复
Sort()函数传入的实际上是数组pstr[]的首地址,所以pstr[i]在函数内外都是指的相同的内存,所以交换之后,函数Sort()外的值也改变了。
strcmp()解释同上
K行天下 2008-07-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 BeerGates 的帖子:]
C/C++ code
void Sort(char *pstr[], int n)
{
char *temp;
int i, j, k;
for(i = 0; i < n - 1; i++)
{
k = i;
for(j = i + 1; j < n; j++)
{
if(strcmp(pstr[k], pstr[j]) > 0)//因为你传进去的是指针数组,就是char**, 它的每一个元素都是字符串指针(char*),
//所以可以使用strcmp来进行比较!,以下就是冒泡排序了!!!

k = j;
if(k != i)
{
temp = pstr[i];
pstr[i] = pstr[k];
pstr[k] = temp;

[/Quote]
monk1100 2008-07-12
  • 打赏
  • 举报
回复
strcmp是这样比较的,两个字符串,从第一个字符开始比,如果相同,继续向下比,如果不同,看这两个字符的ASCII码,如果第一个字符串的比较大,则返回1,相同返回0,否则返回-1.
例如: BASIC和C++比完首字母就不会继续比了.
内容概要:本文系统介绍了物理信息神经网络(PINNs)在求解布洛赫-托雷(Bloch-Torrey)方程中的应用,结合PyTorch框架提供了完整的Python代码实现案例。文章深入阐述了如何将物理先验知识嵌入神经网络训练过程,通过构建复合损失函数,强制网络输出满足控制方程、初始条件与边界条件,从而实现对布洛赫-托雷方程的无网格化、高精度求解。该方法突破了传统数值方法在高维、多尺度及复杂几何场景下的计算瓶颈,展现出优异的泛化能力与计算效率,特别适用于医学成像、扩散磁共振等领域中复杂的物理场建模与仿真任务。; 适合人群:具备深度学习与偏微分方程理论基础,从事科学计算、生物医学工程、材料科学或相关交叉学科研究的研究生、科研人员及算法工程师。; 使用场景及目标:①应用于扩散磁共振成像(dMRI)等医学影像技术中的复杂扩散过程建模与反演;②为高维偏微分方程的高效求解提供数据驱动的新范式,提升仿真精度与计算速度;③作为PINNs在AI for Science领域中的典型实践案例,推动物理引导的深度学习方法在实际科研项目中的落地与拓展。; 阅读建议:建议读者结合提供的完整代码资源(可通过公众号“荔枝科研社”或百度网盘获取),动手复现并调试模型,深入理解PINNs的架构设计、损失函数构建与物理约束嵌入机制,同时可尝试将该方法迁移至其他类似物理系统的建模与求解任务中进行创新性研究。
内容概要:本文围绕“基于多VSG独立微网的多目标二次控制MATLAB模型研究”展开,详细阐述了利用Simulink对多虚拟同步发电机(VSG)构成的独立微网系统进行建模与仿真,实现频率调节、电压支撑与有功无功功率均分等多目标协同优化的二次控制策略。研究引入先进的最优控制算法,解决微网在孤岛运行模式下的功率动态分配、频率电压恢复及系统稳定性问题,并通过MATLAB/Simulink平台构建完整仿真模型,验证所提控制策略在不同负载扰动下的有效性、鲁棒性与动态响应性能。; 适合人群:具备电力系统分析、现代控制理论基础以及MATLAB/Simulink仿真能力的电气工程、自动化等相关专业的硕士研究生、科研人员及从事微网控制系统开发的工程技术人才。; 使用场景及目标:① 深入理解多VSG在独立微网中的并联运行机理与协同控制架构;② 掌握基于Simulink的微网二次控制系统的建模方法与仿真流程;③ 实现频率、电压与功率分配的多目标优化控制仿真验证;④ 为微网控制系统的设计、算法优化及科研课题提供可靠的仿真依据和技术参考。; 阅读建议:建议读者结合文中控制策略,动手搭建Simulink模型,重点关注控制器参数整定对系统动态性能的影响,可通过对比不同工况下的仿真结果,进一步优化控制算法以提升系统鲁棒性与响应精度。

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧