Вопрос Вопрос по с#


raal

Пользователь
Форумчанин
Регистрация
12.03.2017
Сообщения
6
Репутация
1
Решил написать небольшую программу, которая будет переводить текст в различные шифры.
И вот на первом шифре (Цезаря) произошел трабл. Вместо вывода желаемой строки, получаю
System.Char[]. Пытался исправить, искал информацию на форумах, но ничего годного не нашел
Если кто знает как исправить это, буду очень благодарен! Вот исходный код:

using System;
using System.ComponentModel;
using System.Windows.Forms;
using System.IO;
namespace WindowsFormsApp3
{
public partial class Form1 : Form
{
public static string txt2;
public static string txt;
public Form1()
{
InitializeComponent();
txt2 = richTextBox2.Text;
}
private void button1_Click(object sender, EventArgs e)
{
openFileDialog2.ShowDialog();
}

private void openFileDialog2_FileOk(object sender, CancelEventArgs e)
{ try
{
string str = openFileDialog2.FileName;
StreamReader sr = new StreamReader(str);
txt = sr.ReadToEnd();
sr.Close();
}
catch (Exception ex) { richTextBox1.Text = ex.Message; }
finally { Console.Beep();
}
}
private void button2_Click(object sender, EventArgs e)
{
richTextBox1.Text = txt ;
}
private void button3_Click(object sender, EventArgs e)
{
richTextBox1.Text = null;
}

private void button4_Click(object sender, EventArgs e)
{
Encription.Cezar();
richTextBox2.Text = Encription.s.ToString() ;

}
}
public partial class Encription {

public static char[] massAbc = { 'a','b','c','d','e','f','g','h','i','j','k' };
public static char[] s;
public static void Cezar() {
if (Form1.txt == null) { Form1.txt = Form1.txt2; }
s = Form1.txt.ToCharArray();
for (int i = 0; i < s.Length; i++) {
for (int j = 0; j < massAbc.Length; j++) {
if (massAbc[j] == s[ i ])
{
s [ i ]= massAbc[j + 3];
}
else { s[ i ] = '*'; }
}
}
}

}
}
 

Вложения

  • 8JPCJ24t4nA.jpg
    8JPCJ24t4nA.jpg
    163.1 КБ · Просмотры: 66
Последнее редактирование:

virt

Просветленный
Просветленный
Регистрация
24.11.2016
Сообщения
706
Репутация
228
1)Зачем тут класс Encription ?

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

2)s = Form1.txt.ToCharArray();

C# слабо знаю, на зачем переводить в Char* или как-там такой тип называется ?

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

Рекомендую в начале разобраться в консоле, сделать функцию преобразования и в консоле повыводить, как получится, просто эту функцию вставить, либо уже в существующий класс Form1, как метод например, либо просто как вспомогательная функция, если нигде её больше использовать не будете.
 

raal

Пользователь
Форумчанин
Регистрация
12.03.2017
Сообщения
6
Репутация
1
1)Зачем тут класс Encription ?

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

2)s = Form1.txt.ToCharArray();

C# слабо знаю, на зачем переводить в Char* или как-там такой тип называется ?

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

Рекомендую в начале разобраться в консоле, сделать функцию преобразования и в консоле повыводить, как получится, просто эту функцию вставить, либо уже в существующий класс Form1, как метод например, либо просто как вспомогательная функция, если нигде её больше использовать не будете.
Мне просто нужно перебирать строку по буквам, и для это я ее преобразовал в массив с типом char. Второй класс я попробую убрать, но мне кажется не в этом ошибка
 

virt

Просветленный
Просветленный
Регистрация
24.11.2016
Сообщения
706
Репутация
228
Мне просто нужно перебирать строку по буквам, и для это я ее преобразовал в массив с типом char. Второй класс я попробую убрать, но мне кажется не в этом ошибка
Тип string вроде позволяет-же перебирать строку s !

Это скорей-всего лишнее, преобразование такое.
 

raal

Пользователь
Форумчанин
Регистрация
12.03.2017
Сообщения
6
Репутация
1
Encription.s.ToString() ; - здесь s - массив чаров, ToString() выводит тип.
Строку можно вывести, например, так:
richTextBox2.Text = new string(Encription.s);
Я уже понял. Теперь появились еще пару ошибок, но я что-нибудь с ними сделаю
 

X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 054
Репутация
8 161
Вообще незнаю как в C#, но в классическом С++ есть тип string, который позволяет делать сложение строк, поиск в строке и т.д., также там можно обращаться к символу и т.д.
Код:
s[i]

Но это опять-таки говорю про С++, а вообще преобразование типов, это такой гемор и если у вас все переменные string, лучше тогда её и использовать по максимому, без преобразования.

Тем-более char*, например в классическом си это вообще буфер байт, в классическом си вообще нет строк...:)

Когда приходится кодить на С++, думаешь как-же круто, есть тип string, есть класс std:vector, всё это несомненно упрощает жизнь программисту.

В С# не имел опыта кодить, т.к. делаю специфические вещи ! :)
 
Автор темы Похожие темы Форум Ответы Дата
E ВОПРОС-ОТВЕТ. БАРАХОЛКА 8
Верх Низ