使用指针:检查字符串是否按字典顺序排列的程序

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;

  }

ki等于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

因为数组是有序的。

  1. *arr+k*(arr+k)*arr+k+1*(arr+k+1)是两种不同的表达方式。
  2. 按要求应该是strcmp() > 0,而不是strcmp() < 0
  3. i 应该在每次迭代之前初始化(内循环)

提示:

  • 如果数组被索引,其他人将很容易阅读。 arr[k] 而不是 *(arr+k)
  • Indetation 可以在阅读代码时产生很大的不同。