使用指针:检查字符串是否按字典顺序排列的程序
Working with pointers: program that checks if strings are in lexicographical order
我正在尝试编写一个程序来检查字符串列表是否按字典顺序排列。如果是有序的,程序应该 return 1,如果不是 0。为了测试程序,我引入了字符串 AA、BB 和 CC,它们显然应该是有序的。但是,程序 return 0...
#include<stdio.h>
#include<string.h>
int lex_sorted(const char* array[]){
int k;
for(k=0;*array+k+1!=NULL;k++){
if(strcmp(*array+k,*array+k+1)<0){
return 0;
}
}
return 1;
}
int main(void){
int result;
const char* array[]={"AA","BB","CC",NULL};
result= lex_sorted(array);
printf("%d\n",result);
return 0;
由于第一个字符串小于第二个字符串,因此函数 returns 0 由于此语句
if(strcmp(*array+k,*array+i+1)<0){
return 0;
}
当k
和i
等于0时
所以你所做的就是你得到的,
在函数中使用两个循环是没有意义的。函数可以定义为这个演示程序中显示的
#include <stdio.h>
#include <string.h>
int lex_sorted( const char* array[] )
{
if ( *array )
{
while ( *++array && strcmp( array[-1], array[0] ) <= 0 );
}
return *array == NULL;
}
int main(void)
{
const char * array[] = { "AA", "BB", "CC", NULL };
printf( "%d\n", lex_sorted( array ) );
return 0;
}
程序输出为
1
因为数组是有序的。
*arr+k
和*(arr+k)
、*arr+k+1
和*(arr+k+1)
是两种不同的表达方式。
- 按要求应该是
strcmp() > 0
,而不是strcmp() < 0
。
i
应该在每次迭代之前初始化(内循环)
提示:
- 如果数组被索引,其他人将很容易阅读。
arr[k]
而不是 *(arr+k)
- Indetation 可以在阅读代码时产生很大的不同。
我正在尝试编写一个程序来检查字符串列表是否按字典顺序排列。如果是有序的,程序应该 return 1,如果不是 0。为了测试程序,我引入了字符串 AA、BB 和 CC,它们显然应该是有序的。但是,程序 return 0...
#include<stdio.h>
#include<string.h>
int lex_sorted(const char* array[]){
int k;
for(k=0;*array+k+1!=NULL;k++){
if(strcmp(*array+k,*array+k+1)<0){
return 0;
}
}
return 1;
}
int main(void){
int result;
const char* array[]={"AA","BB","CC",NULL};
result= lex_sorted(array);
printf("%d\n",result);
return 0;
由于第一个字符串小于第二个字符串,因此函数 returns 0 由于此语句
if(strcmp(*array+k,*array+i+1)<0){
return 0;
}
当k
和i
等于0时
所以你所做的就是你得到的,
在函数中使用两个循环是没有意义的。函数可以定义为这个演示程序中显示的
#include <stdio.h>
#include <string.h>
int lex_sorted( const char* array[] )
{
if ( *array )
{
while ( *++array && strcmp( array[-1], array[0] ) <= 0 );
}
return *array == NULL;
}
int main(void)
{
const char * array[] = { "AA", "BB", "CC", NULL };
printf( "%d\n", lex_sorted( array ) );
return 0;
}
程序输出为
1
因为数组是有序的。
*arr+k
和*(arr+k)
、*arr+k+1
和*(arr+k+1)
是两种不同的表达方式。- 按要求应该是
strcmp() > 0
,而不是strcmp() < 0
。 i
应该在每次迭代之前初始化(内循环)
提示:
- 如果数组被索引,其他人将很容易阅读。
arr[k]
而不是*(arr+k)
- Indetation 可以在阅读代码时产生很大的不同。