Reputation: 5297
I have a code like
string code = "AABBDDCCRRFF";
In this code, I want to retrieve only distinct characters
The Output should be like:
ANS: ABDCRF
Upvotes: 29
Views: 64204
Reputation: 43984
Just for the heck of it -- using a StringBuilder
string code = "AABBDDCCRRFF";
StringBuilder sb = new StringBuilder();
code.Distinct().ToList().ForEach(c => sb.Append(c));
MessageBox.Show(sb.ToString());
Upvotes: -2
Reputation: 11
To get all distinct characters I have used ascii array. steps 1. Added ascii array of size 256, becuase max char ascii value is 255 step 2. increment each ascii to the location of particular alphabet's ascii value
please refer below code to understand.
public static class StringManipulation
{
public static string UniqueChars(this string astrInputString)
{
astrInputString = astrInputString.ToLower();
int[] arrAscii = new int[256];
string lstrFinalOutput = string.Empty;
for (int i = 0; i < astrInputString.Length; i++)
{
arrAscii[Convert.ToInt32(astrInputString[i])]++;
}
for (int i = 0; i < astrInputString.Length; i++)
{
if (arrAscii[Convert.ToInt32(astrInputString[i])] == 1)
lstrFinalOutput = lstrFinalOutput + astrInputString[i];
}
return lstrFinalOutput;
}
}
class Program
{
static void Main(string[] args)
{
string input = "AAssjjkkLLlx";
Console.WriteLine("Unique Charcters in string " + input.UniqueChars());
}
}
Click to Download this Code https://github.com/SiddharthBhamare/StringManipulation/blob/master/StringManipulation/Program.cs
Upvotes: 0
Reputation: 5266
How about in linq:
var str = "AABBCCDDDDDDEEEEEFFF";
var unique = str.ToCharArray().Distinct();
Console.WriteLine("Answer: {0}.", string.Join(string.Empty, unique));
Upvotes: 2
Reputation: 102478
string code = "AABBDDCCRRFF";
string answer = new String(code.Distinct().ToArray());
Upvotes: 51
Reputation: 43
Here's an approach with grouping by characters...
var code="AABBDDCCRRFF";
var unique = string.Concat(text.GroupBy(a => a).Select(a => a.Key));
Upvotes: 0
Reputation: 21
Here's an approach that provides the string and a count of the distinct characters...
using System;
using System.Collections.Generic;
namespace StringDict
{
class Program
{
static IDictionary<char, int> charDict =new Dictionary<char, int>();
static private string _charStr = "s;ldfjgsl;dkkjfg;lsdkfjg;lsdkfjg;lsdkfjg;lsdkfj";
private static int _outInt=0;
static void Main(string[] args)
{
foreach (var ch in _charStr)
{
if (!charDict.TryGetValue(ch,out _outInt))
{
charDict.Add(new KeyValuePair<char, int>(ch,1));
}
else
{
charDict[ch]++;
}
}
Console.Write("Unique Characters: ");
Console.WriteLine('\n');
foreach (var kvp in charDict)
{
Console.Write(kvp.Key);
}
Console.WriteLine('\n');
foreach (var kvp in charDict)
{
Console.WriteLine("Char: "+kvp.Key+" Count: "+kvp.Value);
}
Console.ReadLine();
}
}
}
Output...
Unique Characters:
s;ldfjgk
Char: s Count: 6
Char: ; Count: 6
Char: l Count: 6
Char: d Count: 6
Char: f Count: 6
Char: j Count: 6
Char: g Count: 5
Char: k Count: 6
Upvotes: 2
Reputation: 6637
Alternative option using dotNet 2.0 compatible code:
public string RemoveDuplicateChars(string input)
{
var stringBuilder = new StringBuilder(input);
foreach (char c in input)
{
stringBuilder.Replace(c.ToString(), string.Empty)
.Append(c.ToString());
}
return stringBuilder.ToString();
}
Upvotes: 3
Reputation: 14391
You can do this as follows
var s = "AABBDDCCRRFF";
var result = s.Distinct();
var distinct = result.Aggregate(string.Empty, (current, c) => current + c.ToString());
Console.WriteLine(distinct);
Upvotes: 0
Reputation: 18832
Linq's Distinct returns distinct elements from a sequence. As the String
class implements IEnumerable<char>
, Distinct
in this context returns an IEnumerable<char>
containing all of the unique characters in the string.
code.Distinct();
Upvotes: 10