user3529737
user3529737

Reputation: 11

Print the last string name in C

I am trying to learn C and here i got a program in which we have to take the input from the user as n number os strings, compare it and arrange it in a alphabetical order. After arranging them in a alphabetical order , i have to only print the last name which was occurring in the order.

Here is the code for the above problem:

#include<stdio.h>
#include<string.h>

int main()
{
     int i,j,m,n,len;
     char a[50][50],temp[100];
     char last ;

     printf("Enter the number of elements you wish to order : ");
     scanf("%d",&m);
     printf("\nEnter the names :\n");

     for (i=0;i<m;i++){
       scanf("%s",a[i]);
      }

      for (i=0;i<m;i++){
       for (j=i+1;j<m+1;j++) {
        if (strcmp(a[i],a[j])>0) {
           strcpy(temp,a[i]);
           strcpy(a[i],a[j]);
           strcpy(a[j],temp);
          }
         }
        }

    printf("\n\nSorted strings are : ");
     for (i=0;i<m+1;i++){
       printf("%s \n",a[i]);
      }
    return 0;
}

~
The Answer goes this way:

Enter the number of elements you wish to order : 4

Enter the names : territory states hello like

Sorted strings are : S$??? hello like states territory

My question goes that why am i getting "S$???" and i want only the last word "territory should be printed out not all the names".

Can anyone let me know where am i going wrong? It will be a great help.

Thanks Tanya

Upvotes: 1

Views: 181

Answers (3)

yasir jafar
yasir jafar

Reputation: 187

this was my program it worked for me in turbo c++

    #include<conio.h>
    #include<iosream.h>
    #include<ctype.h>
    #include<string.h>
    #include<stdio.h>
    #include<stdlib.h>

    void main()
    {
    clrscr();
    char name[100];
    int c=0;

// to take the name including spaces
gets(name);

//this line is to print the first character of the name
cout<<name[0];

//this loop is to print the fist character which is there after every space
for(int l=0;name[l]!='\0';l++)
{
      if(name[l]==' ')
       { 
         cout<<"."<<name[l+1];
//l+1 is used because l is the space and l+1 is the character that we need
       }
}


//this loop is to find out the last space in the entire sting

for(int i=0;name[i]!='\0';i++)
{
     if(name[l+1]==NULL)
     {

      //here we fond the last space in the string
                for(int j=i;name[j]!=' ';j--)
                {
                c=j+1;
                }
// c=j+1 is used bacause we have already taken the first letter of the that word
//no need of taking it again
     }
}
//this loop starts from the last space and the position(of space) is stored in k
for(int k=c;name[k]!='\0';k++)
{
cout<<name[k];
}

    getch();
}

output:

anentt ranjan shukla
a.r.shukla

Upvotes: 0

Merp
Merp

Reputation: 65

\Check this code

In your code you get input as 4

then
a[0]=territory
a[1]=states
a[2]=hello
a[3]=like

But your code runs upper loop at most 3 time then i=3

In next loop j=i+1 then j=4

but a[4]=not exists

Thats why "S$???" occurs

Solution:

#include<stdio.h>
#include<string.h>

int main() {
  int i, j, m, n, len;
  char a[50][50], temp[100];
  char last;
  printf("Enter the number of elements you wish to order : ");
  scanf("%d", &m);

  printf("\nEnter the names :\n");
  for (i = 0; i < m; i++) {
    scanf("%s", a[i]);
  }

  for (i = 0; i < m - 1; i++) {   // m - 1  enough maximum i = 2;
    for (j = i + 1; j < m; j++) { // j maximum j = i + 1   j = 3
      if (strcmp(a[i], a[j]) > 0) {
        strcpy(temp, a[i]);
        strcpy(a[i], a[j]);
        strcpy(a[j], temp);
      }
    }
  }

  printf("\n\nSorted strings are : ");  // print all words in sorted order
  for (i = 0; i < m; i++) {
    printf("%s \n", a[i]);
  }
  printf("Last Word:\n");
  printf("%s\n", a[m - 1]); // a[3] contains last name 
  return 0;
}

Upvotes: 0

nullptr
nullptr

Reputation: 11058

You are sorting m+1 strings with indexes [0..m]. But you input only m strings.

Your indexes should never go above m-1.

Upvotes: 2

Related Questions