2013-09-05 7 views
-6

Я хочу создать приложение con C#, где каждая буква в строке изменяет его значение.Изменение каждой буквы на входной строке C#

Например:

Input string: Hello world. 

И в соответствии с этим:

h = f, 
e = 3, 
l = 1, 
l = 1, 
o = 0, 
blank space = x, 

w = s, 
o = 0, 
r = 5, 
l = 1, 
d = g. 

So the output should be: f3110xs051g 

Основная идея: Как я могу изменить каждую букву в строке, пытаясь имитировать шифрование? Я попытался с string.Replace() в цикле «для», но он возвращает тот же текст. Как я могу его изменить?

Большое спасибо.

+2

Просьба указать код, который у вас есть. – User

+0

Что вы пробовали? Вы должны показать нам свой код, чтобы мы могли вам помочь. Вот подсказка: то, что вы пытаетесь сделать, - это нечто, называемое * подстановочным шифром *. Небольшой Google-фу проделает долгий путь к решению. Другой намек: строки C# ** неизменяемы ** (они не могут быть изменены). Вы можете попробовать прочитать хорошую книгу на C#. –

+4

Создайте карту (например, 'HashSet') и добавьте каждое преобразование символа в символ в качестве пары ключ-значение. Затем перебирайте каждый символ в своей строке, найдите его в наборе и замените его соответствующим значением. Я не собираюсь писать код для вас, так как вы не показали никаких усилий. –

ответ

-2

String.Replace() возвращает строку и не изменяет исходный объект.

Вы должны установить строку возвращаемого значения функции замены:

String test = "abcdefg"; 
test = test.Replace("abc", "xyz"); 
+0

Я тоже пробовал это, но я хочу изменить каждое письмо не только фразой или 1 буквой. :( – Panacek

+0

Не нужно меня понижать, я просто пытаюсь спрогнозировать, почему вы все еще можете получить свое первоначальное значение с помощью своих функций замены. Трудно дать точный совет, если вы не предоставляете никакого кода для работы. – chadiusvt

+0

I не спустил вниз. Извините, если кто-то еще это сделал. Спасибо в любом случае :) – Panacek

-2

Прежде всего в следующий раз показать фактический код, который вы пытались

Во-вторых String.Replace() не заменить строка, то она возвращает замененный строку, так что вы хотите, это:

text = text.Replace("h","f") 

третьих, вам не нужно в цикле, String.Replace() заменить все I nstance старого значения

четвертой и последней, читать doc

+0

Упс, моя вина. Это мой первый раз в Stackoverflow. В следующий раз я не пропущу код. – Panacek

+0

@Panacek Meh не проблема, помните, что люди ожидают, что OPs покажут, что они приложили некоторые усилия, прежде чем спрашивать, что касается 'String.Замените ', вероятно, это не самый лучший вариант, есть варианты gazillion для строковых манипуляций в C# немного оглядеться, вы сами найдете хорошую альтернативу. –

+0

' Replace' неспособен решить эту проблему. Если вы сопоставляете все символы 'h' с' f', затем сопоставляете все 'f'' с 'e' (или что-то еще), которое вы не знаете, какой из' f' ' где они находятся в оригинале и которые отображаются «h». – Servy

2

Вы можете попробовать создать строку, строка словаря и загрузить его с отображением вам нужно. Затем создайте массив символов и примените лямбду, которая преобразует строковые значения и, наконец, присоединяется к результату.

Dictionary<char,char> d = new Dictionary<char,char>(); 
d.Add('h','f'); 
d.Add('e','3'); 
d.Add('l','1'); 
d.Add('o','0'); 
d.Add(' ','x'); 

String.Concat("hello".Select (x => d[x])); 

Но я думаю, вы должны использовать библиотеку шифрования.

+1

1) вы просто хотите «Словарь » вместо этого. Все упростит. 2) 'ToCharArray' не используется; 'string' реализует' IEnumerable '3) Вы должны просто использовать' String.Concat', а не 'String.Join', поскольку вы объединяете строки, семантически, не присоединяясь к ним. – Servy

+0

@Servy +1 за очень конструктивный комментарий. Я буду применять ваши заметки с вашего разрешения ... –

+0

Вот почему я их создал. – Servy

Смежные вопросы