我是编程的初学者,现在我的讲座都是关于指针的主题。我应该从键盘输入字符串(最多40),然后按字母顺序排序。使用指针对字符串进行排序
要求输入应该在输入“空”字符串时立即中断,指向字符串的指针应该存储在数组中,排序时我应该将指针移动到字符串,我应该使用strcmp
函数。
我盯着写我的代码,想问你我是否在正确的轨道上。我被建议将字符串存储在二维char
数组中,但问题是即使我输入空行(我认为应该只按Enter
),程序仍会询问输入。其次,我想问你关于排序字符串的最佳算法,因为我没有完全排序的经验。
编辑我在我的代码中做了一些改变,它给出了我期望的输出,按字母顺序对字符串进行排序。但是,如果我的代码中有任何重大缺陷,并且可能会做出一些改进,我会非常感谢C中更有经验的人的意见。在部分我不明白一个指针被分配了一个地址,但是我创建指针数组的方式真的是最有效的吗?我知道我可以使用malloc
,但我想像我一样使用2D阵列。
int count = 0;
char arr[40][100];
char (*poi[40])[100]; //Is the array of pointers declared right?
for (int i = 0; i < 40; i++)
{
fgets(arr[i], 101, stdin);
count++;
if (strcmp(arr[i], "\n") == 0)
{
break;
}
}
printf("\n");
for(int i = 0; i < count; i++)
{
poi[i] = &arr[i]; //I don't really understand how this part works, seems to work though
}
for(int i = 0; i < count - 1; i++)
{
for(int j = i + 1; j < count; j++)
{
if(strcmp(*poi[i], *poi[j]) > 0) //if I type here strcmp(arr[i], arr[j]) the output is not sorted properly, why?
{
char (*temp)[100] = poi[i];
poi[i] = poi[j];
poi[j] = temp;
}
}
}
//returns sorted strings
for (int i = 0; i < count; i++)
{
printf("%s", *poi[i]);
}
第一步是确定您需要使用哪种编程语言编写代码。 – juanchopanza
@juanchopanza没有要求我的入门课程有“C”和“C++”两个元素。我会很感激一个建议。 – Theta
C++,'std :: string','std :: sort'。 – juanchopanza