【问题标题】:Code returns only the first letter in alphabetical order, but not the rest代码仅返回按字母顺序排列的第一个字母,而不返回其余字母
【发布时间】:2019-01-20 18:12:32
【问题描述】:

我的代码只返回按字母顺序排列的第一个字母。例如。如果输入词是“coderbyte”,我想要的返回结果应该是“bcdeeorty”。但是,我的程序返回“bbbbbbbbb”。我花了几个小时试图弄清楚,我的代码对我来说似乎还可以,但显然不是。

#include <stdio.h> 
#include <string.h>
void AlphabetSoup(char str[]) { 
  int first = str[0];  // code goes here  
  int index = 0;
  int copy[8];
  int current = copy[index];
  int k = 0 ;


  for (int i = 0; i < strlen(str); i++) {
      if ( str[i] > str[i-1] ) {
        copy[0] = str[i-1]; // first character
      }
      if(i == strlen(str) -1){
        printf("%c", copy[0]); // printing the first character
        index += 1; // incrementing the str[index]
      }
    }

  while (k < strlen(str)){
    for (int j = index; j < strlen(str); j++) {
      if( str[j] > str[j-1] ) {
        current = str[j-1];
      }
      if(j == strlen(str) - 1){
        printf("%c", current);
        index += 1;
      }
    }
    k++;
  }
}


int main() {
  AlphabetSoup("coderbyte"); // bcdeeorty
}

【问题讨论】:

  • int copy[8]; int current = copy[index]; copy 未初始化。
  • 你可以使用qsort()
  • 您使用copy 可能未初始化,而str[i - 1]i = 0 您访问str 的内存越界并且您的代码无法排序。
  • 您的代码没有显示它应该完成的任务 - 比较 cmets // arrange chars in array up to terminating NUL in ascending order// code goes here

标签: c algorithm alphabetical alphabetical-sort


【解决方案1】:
#include <stdio.h> 
#include <string.h>
#include <stdlib.h>

void alphabet_soup(char str[]) ;

void swap_char( char *str , int target , int source )
{
    int temp;
    temp=str[target];
    str[target]=str[source];
    str[source]=temp;
}

void alphabet_soup(char *str) 
{ 
  int lenstring=0;
  int big=0;
  int bigpos=0;
  int current=0;
  int itail=0;

  if(!strlen(str)){printf("no string to process"); getchar(); exit(0);} // to be sure

  lenstring=strlen(str);
  --lenstring ; // lenstring position in string is null reduce by 1 to get last char

 // find big then swap with last char
  for( itail=0 ; itail<lenstring ; itail++)
  {
      current=lenstring-itail;
      big=str[current];
      bigpos=current;
      printf("\n string to process is %s" , str);
      printf("\n last char in string is %c at position %d", big , current ); // debug help
      getchar();   

    printf("\n find biggest char and its position"   );
  for (int i =current ; i>=0 ; --i)
  {
      if( str[i]>big ) 
      {
          big=str[i];
          bigpos=i;
      }
   }
       printf("\n big is %c at position %d", big , bigpos ); // debug help
       getchar();

   swap_char( str, current , bigpos );


  }// end itail=0

  printf("\n final string == %s" , str );

}

int main()
{
    char string[999];
    //strcpy( string , "" );
    //strcpy( string , "bcdeeorty" );
    //strcpy( string , "zyxba" );
   strcpy( string , "a#zdcba_" );
    alphabet_soup(string);
    }

【讨论】:

    猜你喜欢
    • 2015-09-28
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 2020-03-29
    • 2010-10-07
    相关资源
    最近更新 更多