#include <stdio.h>
int main()
{
char * str[ ]={"C program", "Basic", "Foxbase+", "Fortran", "Pascal"};
int i,j;
char * temp;
int k;
for(i=0;i<4;i++)
{
k=i;
for(j=i+1;j<5;j++)
if(str[i] < str[j]) k=j;
temp=str[i]; str[i] = str[k]; str[k] = temp;
}
for(i=0;i<5;i++)
printf("%s\n",str[i]);
return 0;
}
我想按字母顺序(ASCII)对上面给出的字符串进行排序,但我做不到,我已经知道这段代码的错误部分是
if(str[i] < str[j]) k=j;
我试过很多次了,都没用。我已经试过了:*str[i]〈*str[j](不起作用,我认为这是合理的?)
顺便说一句,使用string. h是不允许的,我怎么才能把这里的一切都做好呢?
2条答案
按热度按时间g9icjywg1#
从这个问题的注解中可以看出,你不被允许使用任何库函数--因此你需要手动比较这些字符串(注意,你不能只比较指针,这些可能是任意地址,你需要比较字符串指向什么!)--而且你甚至不被允许编写一个单独的函数,你也需要内联这段代码。
一般来说,字符串比较可能如下所示(这里仍然是一个函数):
编辑:还有一个更简单的解决方案(感谢@Lundin的提示),只要字符串仍然 * 可以 * 相等,就进行迭代:
旁注:如果字符串包含字符范围(从128到255,包括128和255;在您的示例中没有问题):未指定原始
char
是有符号的还是无符号的-这会在比较不位于char
范围的相同一半(200 - 100 = 100 > 0
<->-56 - 100 = -156 < 0
)中的字符时产生差异。如果在任何差异或比较(以上和以下)时强制转换为unsigned char
,则可以在不同平台上实现更一致的行为:一般来说,使用这样的函数是更好的解决方案。也许你会再问一次,你是否被允许写一个新函数!
否则,在您的情况下,您可以减少测试代码,使其更小,因此:
0sgqnhkj2#
而不是将指针与
代码需要比较这些指针引用的 * 字符串 *。
由于OP有义务不使用
strcmp()
,通过比较字符串,一次一个字符(如unsigned char
)相等(而不是一个 * 空字符 *),使自己的。报告零时,相同或负或正对应的符号的差异。