Solved

Shuffle characters in a string

Posted on 2007-04-09
9
3,499 Views
Last Modified: 2008-01-09
Given a string, return the string with first and last chars of each word unchanged and rest chars jumbled up in any way.
For ex:
This is a String -> Tihs is a Srtnig

I have the following code to reverse a string: How can I modify it to return the above result?

#include < stdio.h >
#define SENT "This is a String"

int reverse(char *string, char delimiter)
{
    char *src, *dest,*temp=string;
    while( *temp ) {
         if (*temp == delimiter) {
                     temp++;
                     continue;
         }
         src=dest=temp;
         while ( (*(dest+1) != delimiter) && ( *(dest+1) != '\0' ) )
           dest++;
         temp=dest+1;
         while( dest > src ) {
                char temp = *dest;
                *dest-- = *src;
                *src++=temp;
         }
    }
}


int main()
{
    char name[] = SENT;
    printf("Before Call: %s\n",name);
    reverse(name,'\0'); /* Reverse Complete Sentence */
    reverse(name,' '); /* Reverse Words */
    printf("After Call: %s\n",name);
   
}


0
Comment
Question by:niftyhawk
  • 4
  • 2
  • 2
  • +1
9 Comments
 
LVL 5

Expert Comment

by:Yttribium
ID: 18876619
It looks like it's in the wrong section, this is very much C/C++.   Do you want this in C# though?
0
 
LVL 1

Author Comment

by:niftyhawk
ID: 18876671
A c# equivalent for the above would help too.. I have posted this in C/C++ and C# section.
0
 
LVL 16

Expert Comment

by:AlexNek
ID: 18876789
In C/C++ and C# I would create complete diferent realization but the main Idea can be the same.
- Find the words.
- Swap symbols in word as needed.

In C I would create an additional array with start/end word positions.
In C# I would split a string into the words first.

0
 
LVL 5

Expert Comment

by:Yttribium
ID: 18876865
using System;
using System.Collections.Generic;
using System.Text;

namespace ShuffleLetters
{
      class Program
      {
            static void Main(string[] args)
            {
                  clsShuffleLetters c;
                  c = new clsShuffleLetters(args);
            }
      }


class clsShuffleLetters
{
      public clsShuffleLetters(string[] args)
      {
                  string strTemp = String.Empty;
                  string strFinal = String.Empty;

                  for (int i = 0; i < args.Length; i++)
                  {
                        strFinal += this.ShuffleWord(args[i].ToString()) + " ";
                  }

                  Console.WriteLine(strFinal);
                  string s = Console.ReadLine();
            }

            public string ShuffleWord(string s)
            {
                  Random r = new Random((int)(new TimeSpan()).Ticks);
                  System.Collections.ArrayList arl = new System.Collections.ArrayList();
                  string strFinal = String.Empty;
                  int temp = 0;

                  if (s.Length > 2)
                  {
                        for (int i = 1; i < s.Length - 1; i++)
                        {
                              arl.Add(i); //fill the index list
                        }

                        for (int c = 1; c < s.Length -1 ; c++)
                        {
                              temp = r.Next(arl.Count);
                              strFinal += s[(int)arl[temp]].ToString();
                              arl.RemoveAt(temp);                              
                        }
                        strFinal = s[0] + strFinal + s[s.Length-1];
                        return strFinal;
                  }

                  return s;

            }
      }
}

0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 5

Accepted Solution

by:
Yttribium earned 500 total points
ID: 18876896
Commented Version:



using System;
using System.Collections.Generic;
using System.Text;

namespace ShuffleLetters
{
      class Program
      {
            static void Main(string[] args)
            {
                  clsShuffleLetters c;
                  c = new clsShuffleLetters(args);
            }
      }


class clsShuffleLetters
{
      public clsShuffleLetters(string[] args)
      {
                  string strFinal = String.Empty; //something to hold the sentence

                  for (int i = 0; i < args.Length; i++) //For each word
                  {
                        strFinal += this.ShuffleWord(args[i].ToString()) + " "; //Shuffle the middle part and stick it in a sentence
                  }

                  Console.WriteLine(strFinal); //Write it ... what else?
                  string s = Console.ReadLine(); //wait for input
            }

            public string ShuffleWord(string s)
            {
                  Random r = new Random((int)(new TimeSpan()).Ticks);  //just something to randomize
                  System.Collections.ArrayList arl = new System.Collections.ArrayList(); //a list that will hold a list of indexes (1 to the length of string-1)
                  string strFinal = String.Empty; //final string
                  int temp = 0; //dummy variable

                  if (s.Length > 3) //If the word is more than 3 letters, then shuffle (last one was 2, but 3 is also pointless)
                  {
                        for (int i = 1; i < s.Length - 1; i++) //Fill the array list with all the "shuffleable indexes"
                        {
                              arl.Add(i); //fill the index list
                        }

                        for (int c = 1; c < s.Length -1 ; c++) //For each letter between the first and the last
                        {
                              temp = r.Next(arl.Count); //get the first RANDOM index from our "usable index list"
                              strFinal += s[(int)arl[temp]].ToString(); //place the letter that's refenced in that index
                              arl.RemoveAt(temp);                              // remove this index, so we don't use it again
                        }
                        strFinal = s[0] + strFinal + s[s.Length-1]; // place the shuffled string between first and last letter and
                        return strFinal; //return it
                  }

                  return s; //nothing happened to the string, return it

            }
      }
}

0
 
LVL 45

Expert Comment

by:Kdo
ID: 18876954

Hey folks.

This is clearly a homework assignment.  Complete solutions are inappropriate.


Kent
0
 
LVL 1

Author Comment

by:niftyhawk
ID: 18876988
Thanks for the answers guys.. This is an interview question..not a homework question.
0
 
LVL 5

Expert Comment

by:Yttribium
ID: 18876995
Well given that it was in C#, his homework appears to be in C++, so, I didn't mind , the functions I used in C# are NOT remotely usable in C++, he'd have to understand pointers, array access, etc.  Also it would need a little different approach in C++.
0
 
LVL 45

Expert Comment

by:Kdo
ID: 18877046

Yeah.  I'm still not used to this auto-cross-posting/viewing thing in EE.  When in the "C" forum I still expect to see "C" questions.  The "C" forum has more student related questions so we police it quite a bit.

Apologies to all,
Kent
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Article by: SunnyDark
This article's goal is to present you with an easy to use XML wrapper for C++ and also present some interesting techniques that you might use with MS C++. The reason I built this class is to ease the pain of using XML files with C++, since there is…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.
The viewer will learn how to clear a vector as well as how to detect empty vectors in C++.

914 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now