Код возвращает только первую букву в алфавитном порядке, но не остальные - PullRequest
0 голосов
/ 20 января 2019

Мой код возвращает только первую букву в алфавитном порядке. Например. если входное слово «кодер-байт», мой желаемый возвращаемый результат должен быть «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
}

1 Ответ

0 голосов
/ 21 января 2019
#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);
    }
...