Solved

Shuffle characters in a string

Posted on 2007-04-09
9
3,493 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
What Should I Do With This Threat Intelligence?

Are you wondering if you actually need threat intelligence? The answer is yes. We explain the basics for creating useful threat intelligence.

 
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

Top 6 Sources for Identifying Threat Actor TTPs

Understanding your enemy is essential. These six sources will help you identify the most popular threat actor tactics, techniques, and procedures (TTPs).

Join & Write a Comment

This article describes a simple method to resize a control at runtime.  It includes ready-to-use source code and a complete sample demonstration application.  We'll also talk about C# Extension Methods. Introduction In one of my applications…
Windows programmers of the C/C++ variety, how many of you realise that since Window 9x Microsoft has been lying to you about what constitutes Unicode (http://en.wikipedia.org/wiki/Unicode)? They will have you believe that Unicode requires you to use…
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.
The goal of the tutorial is to teach the user how to use functions in C++. The video will cover how to define functions, how to call functions and how to create functions prototypes. Microsoft Visual C++ 2010 Express will be used as a text editor an…

708 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

13 Experts available now in Live!

Get 1:1 Help Now