Click here to Skip to main content
15,867,308 members
Articles / Programming Languages / C#
Tip/Trick

How to reverse a string sentence (only words, not characters) without using the C# "string built-in" functions

Rate me:
Please Sign up or sign in to vote.
4.00/5 (1 vote)
5 Jan 2013CPOL 72K   3   14
Reverse of a string sentence

Introduction

This article represents one of few ways of reversal of string sentence (only words, without using any inbuilt c# functions except String.Length property as author feels lazy to write code for it.)

Background

Knowledge of control structures (for, foreach, while) and data types (char, string).

Using the code

There are mainly three functions created :

  1. ReverseString( String ): returns reversed string, e.g., ReverseString("Hello How are you").
  2. Split( String ): returns a string array containing words and spaces at consecutive places.
  3. ReturnSpace( int ): accepts an integer representing number of spaces, creates and return a string containing specified number of spaces.
C#
/**Reverse a Sentence without using C# inbuilt functions
 (except String.Length property, m not going to write code for this small functionality )*/
const char EMPTYCHAR = ' ';
const string EMPTYSTRING = " ";

/// <summary>
/// Reverse a string Sentence
/// </summary>
/// <param name="pStr"></param>
/// <returns></returns>
public string ReverseString(string pStr)
{
  if (pStr.Length > 1) //can be checked/restricted via validation
  {
    string strReversed = String.Empty;
    string[] strSplitted = new String[pStr.Length];
    int i;

    strSplitted = Split(pStr); // Complexity till here O(n)

    for (i = strSplitted.Length - 1; i >= 0; i--)
    // this for loop add O(length of string) in O(n) which is similar to O(n)
    {
        strReversed += strSplitted[i];
    }

    return strReversed;
  }
  return pStr;
}

/// <summary>
/// Split the string into words & empty spaces
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
public string[] Split(string str)
{
    string strTemp = string.Empty;
    string[] strArryWithValues = new String[str.Length];
    int j = 0;
    int countSpace = 0;

    //Complexity of for conditions result to O(n)
    foreach (char ch in str)
    {
        if (!ch.Equals(EMPTYCHAR))
        {
            strTemp += ch; //append characters to strTemp

            if (countSpace > 0)
            {
                strArryWithValues[j] = ReturnSpace(countSpace); // Insert String with Spaces
                j++;
                countSpace = 0;
            }
        }
        else
        {
            countSpace++;

            if (countSpace == 1)
            {
                strArryWithValues[j] = strTemp; // Insert String with Words
                strTemp = String.Empty;
                j++;
            }
        }
    }

    strArryWithValues[j] = strTemp;
    return (strArryWithValues);
}

/// <summary>
/// Return a string with number of spaces(passed as argument)
/// </summary>
/// <param name="count"></param>
/// <returns></returns>
public string ReturnSpace(int count)
{
    string strSpaces = String.Empty;

    while (count > 0)
    {
        strSpaces += EMPTYSTRING;
        count--;
    }

    return strSpaces;

}

/************Reverse Sentence Ends***************/

Similar post

Points of Interest

Maintaining complexity to O(n) where n is length of string.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
United States United States
This member doesn't quite have enough reputation to be able to display their biography and homepage.

Comments and Discussions

 
GeneralReverse the individual words in a sentence Pin
Member 1213583012-Nov-15 16:47
Member 1213583012-Nov-15 16:47 
SuggestionAnother suggestion Pin
Malte Klena9-Jan-13 7:08
Malte Klena9-Jan-13 7:08 
SuggestionHow about this... Pin
Andreas Gieriet5-Jan-13 12:11
professionalAndreas Gieriet5-Jan-13 12:11 
Quick and dirty Wink | ;-)
C#
public static string ReverseWordSequencePreservingSpaces(string input)
{
    // collect the result in a character array first
    char[] output = new char[input.Length];
    // iterate over input from back to front, buffering non-space characters, and flushing the buffer to the output with each word gap (space)
    int buflen = 0;
    int outpos = 0;
    int inpos = input.Length;
    while(inpos-- > 0)
    {
        char c = input[inpos];
        if (c == ' ')
        {
            // flush the buffer to the output
            if (buflen > 0) for (int pos = inpos + 1; buflen-- > 0; ++pos) output[outpos++] = input[pos];
            // append the space
            output[outpos++] = c;
        }
        else
        {
            // push non space to the buffer, i.e. count the number of non-space characters
            buflen++;
        }
    }
    // final flush of the buffer
    for (int pos = inpos + 1; buflen-- > 0; ++pos) output[outpos++] = input[pos];
    // return string from array
    return new string(output);
}


Cheers
Andi

PS: I would not suggest to do this in productive code, though - I regard it as mental training only Wink | ;-)
QuestionRepeat Pin
jfriedman4-Jan-13 4:15
jfriedman4-Jan-13 4:15 
AnswerRe: Repeat Pin
PIEBALDconsult4-Jan-13 4:35
mvePIEBALDconsult4-Jan-13 4:35 
GeneralRe: Repeat Pin
jfriedman4-Jan-13 5:21
jfriedman4-Jan-13 5:21 
GeneralRe: Repeat Pin
PIEBALDconsult4-Jan-13 10:51
mvePIEBALDconsult4-Jan-13 10:51 
GeneralRe: Repeat Pin
VeeQuest5-Jan-13 9:24
VeeQuest5-Jan-13 9:24 
SuggestionUse StringBuilders Pin
John Brett2-Jan-13 22:06
John Brett2-Jan-13 22:06 
GeneralRe: Use StringBuilders Pin
adriancs3-Jan-13 7:46
mvaadriancs3-Jan-13 7:46 
GeneralThoughts Pin
PIEBALDconsult2-Jan-13 16:38
mvePIEBALDconsult2-Jan-13 16:38 
QuestionGood one Pin
maq_rohit2-Jan-13 14:53
professionalmaq_rohit2-Jan-13 14:53 
AnswerRe: Good one Pin
VeeQuest5-Jan-13 9:26
VeeQuest5-Jan-13 9:26 
GeneralRe: Good one Pin
maq_rohit9-Jan-13 19:28
professionalmaq_rohit9-Jan-13 19:28 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.