Back to: C#.NET Programs and Algorithms
How to Reverse Each Word in a Given String in C#
In this article, I am going to discuss How to Reverse Each Word in a Given String in C# with some examples. Please read our previous article where we discussed How to Reverse a String in C# program with some examples. As part of this article, we are going to use the following three approaches to reverse each word in a given string C#.
- Without using a built-in function
- Using Stack
- Using LINQ
Program Description:
The user will input a string and we need to reverse each word individually without changing its position in the string. Here, we will take the input as a string from the user and then we need to reverse each word individually without changing their position in the sentence as shown in the below image.

Method1: Without using any built-in function:
In the following example, we generate all words separated by space. Then reverse the words one by one.
using System.Collections.Generic;
namespace LogicalPrograms
static void Main(string[] args)
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
StringBuilder reverseWordString = new StringBuilder();
List<char> charlist = new List<char>();
for (int i = 0; i < originalString.Length; i++)
if (originalString[i] == ' ' || i == originalString.Length - 1)
if (i == originalString.Length - 1)
charlist.Add(originalString[i]);
for (int j = charlist.Count - 1; j >= 0; j--)
reverseWordString.Append(charlist[j]);
reverseWordString.Append(' ');
charlist = new List<char>();
charlist.Add(originalString[i]);
Console.WriteLine($"Reverse Word String : {reverseWordString.ToString()}");
using System;
using System.Collections.Generic;
using System.Text;
namespace LogicalPrograms
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
StringBuilder reverseWordString = new StringBuilder();
List<char> charlist = new List<char>();
for (int i = 0; i < originalString.Length; i++)
{
if (originalString[i] == ' ' || i == originalString.Length - 1)
{
if (i == originalString.Length - 1)
charlist.Add(originalString[i]);
for (int j = charlist.Count - 1; j >= 0; j--)
reverseWordString.Append(charlist[j]);
reverseWordString.Append(' ');
charlist = new List<char>();
}
else
{
charlist.Add(originalString[i]);
}
}
Console.WriteLine($"Reverse Word String : {reverseWordString.ToString()}");
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
using System.Text;
namespace LogicalPrograms
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
StringBuilder reverseWordString = new StringBuilder();
List<char> charlist = new List<char>();
for (int i = 0; i < originalString.Length; i++)
{
if (originalString[i] == ' ' || i == originalString.Length - 1)
{
if (i == originalString.Length - 1)
charlist.Add(originalString[i]);
for (int j = charlist.Count - 1; j >= 0; j--)
reverseWordString.Append(charlist[j]);
reverseWordString.Append(' ');
charlist = new List<char>();
}
else
{
charlist.Add(originalString[i]);
}
}
Console.WriteLine($"Reverse Word String : {reverseWordString.ToString()}");
Console.ReadKey();
}
}
}
Output:

Method2: Using Stack to Reverse Each Word in C#
Here, we are using a stack to push all words before space. Then as soon as we encounter a space, we empty the stack. The program is self-explained, so please go through the comments line.
using System.Collections.Generic;
namespace LogicalPrograms
static void Main(string[] args)
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
Stack<char> charStack = new Stack<char>();
// Traverse the given string and push all characters
// to stack until we see a space.
for (int i = 0; i < originalString.Length; ++i)
if (originalString[i] != ' ')
charStack.Push(originalString[i]);
// When seeing a space, then print contents of the stack.
while (charStack.Count > 0)
Console.Write(charStack.Pop());
// Since there may not be space after last word.
while (charStack.Count > 0)
Console.Write(charStack.Pop());
using System;
using System.Collections.Generic;
namespace LogicalPrograms
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
Stack<char> charStack = new Stack<char>();
// Traverse the given string and push all characters
// to stack until we see a space.
for (int i = 0; i < originalString.Length; ++i)
{
if (originalString[i] != ' ')
{
charStack.Push(originalString[i]);
}
// When seeing a space, then print contents of the stack.
else
{
while (charStack.Count > 0)
{
Console.Write(charStack.Pop());
}
Console.Write(" ");
}
}
// Since there may not be space after last word.
while (charStack.Count > 0)
{
Console.Write(charStack.Pop());
}
Console.ReadKey();
}
}
}
using System;
using System.Collections.Generic;
namespace LogicalPrograms
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
Stack<char> charStack = new Stack<char>();
// Traverse the given string and push all characters
// to stack until we see a space.
for (int i = 0; i < originalString.Length; ++i)
{
if (originalString[i] != ' ')
{
charStack.Push(originalString[i]);
}
// When seeing a space, then print contents of the stack.
else
{
while (charStack.Count > 0)
{
Console.Write(charStack.Pop());
}
Console.Write(" ");
}
}
// Since there may not be space after last word.
while (charStack.Count > 0)
{
Console.Write(charStack.Pop());
}
Console.ReadKey();
}
}
}
Method3: Using Linq to Reverse Each Word in C#
namespace LogicalPrograms
static void Main(string[] args)
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
string reverseWordString = string.Join(" ", originalString
.Select(x => new String(x.Reverse().ToArray())));
Console.WriteLine($"Reverse Word String : {reverseWordString}");
using System;
using System.Linq;
namespace LogicalPrograms
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
string reverseWordString = string.Join(" ", originalString
.Split(' ')
.Select(x => new String(x.Reverse().ToArray())));
Console.WriteLine($"Reverse Word String : {reverseWordString}");
Console.ReadKey();
}
}
}
using System;
using System.Linq;
namespace LogicalPrograms
{
class Program
{
static void Main(string[] args)
{
Console.Write("Enter a String : ");
string originalString = Console.ReadLine();
string reverseWordString = string.Join(" ", originalString
.Split(' ')
.Select(x => new String(x.Reverse().ToArray())));
Console.WriteLine($"Reverse Word String : {reverseWordString}");
Console.ReadKey();
}
}
}
Output:

Code Explanation:
Split the input string using a single space as the separator.
The Split method is used for returning a string array that contains each word of the input string. We use the Select method for constructing a new string array, by reversing each character in each word. Finally, we use the Join method for converting the string array into a string.
In the next article, I am going to discuss How to Remove Duplicate Characters from a given string in C# using different mechanisms. I hope now you understood How to Reverse Each Word in a Given String in C# with different mechanisms.
About the Author: Pranaya Rout
Pranaya Rout has published more than 3,000 articles in his 11-year career. Pranaya Rout has very good experience with Microsoft Technologies, Including C#, VB, ASP.NET MVC, ASP.NET Web API, EF, EF Core, ADO.NET, LINQ, SQL Server, MYSQL, Oracle, ASP.NET Core, Cloud Computing, Microservices, Design Patterns and still learning new technologies.
public class ReverseEachWord
{
public static void Main(String[] args)
{
string a = Console.ReadLine();
ReverseWord(a);
}
public static void ReverseWord(string a)
{
string newString = string.Empty;
for (int i = a.Length-1; i >=0; i–)
{
newString = newString + a[i];
}
Console.WriteLine(newString);
}
}
// A simple attempt from my side 🙂 //
public class Program
{
public static void Main()
{
string str = “dotnettutorials rocks”;
var spcArr = str.Split(‘ ‘);
str = “”;
foreach (var w in spcArr)
{
char[] arr = w.ToCharArray();
for (int i = arr.Length – 1; i >= 0; i–)
{
str += arr[i];
}
str += ” “;
}
Console.WriteLine(str.Trim());
}
}
static void Main()
{
string a = Console.ReadLine();
string[] g = a.Split(‘ ‘);
string reverse = “”;
string[] q = new string[100];
foreach (var h in g)
{
int i = 0;
q[i] = h;
foreach (char ch in q[i])
reverse = ch + reverse;
Console.Write(reverse+” “);
reverse = “”;
i++;
}
}
public static void Main(string[] args)
{
string s=”siva bhaskar reddy”;
string[]str1=s.Split(” “);
foreach(string str in str1)
{
string rev=null;
for(int i=str.Length-1;i>=0;i–)
{
rev=rev+str[i];
}
Console.Write(rev+” “);
}
}