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

时间:2017-03-26 12:32:26

标签: c arrays pointers strcmp

我正在尝试创建一个程序来检查字符串列表是否按字典顺序排列。如果它是有序的,程序应该返回1,如果不是0.为了测试程序我引入了字符串AA,BB和CC,显然应该是有序的。但是,程序返回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;

2 个答案:

答案 0 :(得分:0)

由于第一个字符串小于第二个字符串,因此该函数返回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 :(得分:0)

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

    • 如果对数组进行索引,则其他人很容易阅读。 arr[k]代替*(arr+k)
    • 在阅读代码时,Indetation会有很大的不同。