Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2009, 14:07   #1
Rinox
 
Регистрация: 13.09.2009
Сообщений: 3
По умолчанию Транслитерация (2 вопроса)

Вот текст рабочей программы которая используеться для транслитерации символов с украинского языка(кирилица) на украинский язык (латиницу), также есть возможность транслитерации с текстового файла.
1)Хотелось бы узнать есть ли возможность на C сделать так что бы у пользователя была возможность определить файл для транслитерации самостоятельно. Как это сделать?
2)Можно ли обойтись без оператора if и сделать програму покороче, это конешно хорошо что в украинском языке 30 букв маленьких +30 большых + 10-15 символов, а если бы пришлось писать там где 100+ или больше, программа бы получалась очень большой. Существует ли возможность другого варианта написания, и как это сделать?
Код:
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//---------------------------------------------------------------------------

void main()
{
clrscr();
int i,b,k,n;
char a;
char str[100],p;


//===================================================
printf("Виберіть режим переводу \n");
printf(якщо з файлу натисніть - 1 якщо з клавіатури - 2\n");
scanf("%d",&b);

//================================================
if (b==1) {

	//  відкриваємо файл
	FILE *f;

	f=fopen("D:\\Kyrsova\\read.txt", "r");

    printf("\tRezultat z fajlu\n");
   while (!feof(f)) {             //   зчитуєм побуквенно з файлу
       fscanf(f,"%c",&p);


     //Маленькі літери
      if (p=='й') printf("y");
      if (p=='ц') printf("ts");
      if (p=='у') printf("u");
      if (p=='к') printf("k");
      if (p=='е') printf("e");
      if (p=='н') printf("n");
      if (p=='г') printf("h");
      if (p=='ш') printf("sh");
      if (p=='щ') printf("sch");
      if (p=='з') printf("z");
      if (p=='х') printf("kh");
      if (p=='ї') printf("i");
      if (p=='ф') printf("f");
      if (p=='і') printf("i");
      if (p=='в') printf("v");
      if (p=='а') printf("a");
      if (p=='п') printf("p");
      if (p=='р') printf("r");
      if (p=='о') printf("o");
      if (p=='л') printf("l");
      if (p=='д') printf("d");
      if (p=='ж') printf("zh");
      if (p=='є') printf("ie");
      if (p=='я') printf("ia");
      if (p=='ч') printf("ch");
      if (p=='с') printf("s");
      if (p=='м') printf("m");
      if (p=='и') printf("y");
      if (p=='т') printf("t");
      if (p=='ь') printf("'");
      if (p=='б') printf("b");
      if (p=='ю') printf("iu");
      //Великі літери
      if (p=='Й') printf("I");
      if (p=='Ц') printf("Ts");
      if (p=='У') printf("U");
      if (p=='К') printf("K");
      if (p=='Е') printf("E");
      if (p=='Н') printf("N");
      if (p=='Г') printf("H");
      if (p=='Ш') printf("Sh");
      if (p=='Щ') printf("Sch");
      if (p=='З') printf("Z");
      if (p=='Х') printf("Kh");
      if (p=='Ї') printf("I");
      if (p=='Ф') printf("F");
      if (p=='І') printf("I");
      if (p=='В') printf("V");
      if (p=='А') printf("A");
      if (p=='П') printf("P");
      if (p=='Р') printf("R");
      if (p=='О') printf("O");
      if (p=='Л') printf("L");
      if (p=='Д') printf("D");
      if (p=='Ж') printf("Zh");
      if (p=='Є') printf("Ie");
      if (p=='Я') printf("Ia");
      if (p=='Ч') printf("Ch");
      if (p=='С') printf("S");
      if (p=='М') printf("M");
      if (p=='Т') printf("T");
      if (p=='Б') printf("B");
      if (p=='Ю') printf("Iu");
      //Знаки
      if (p==' ') printf(" "); //Пробіл
      if (p=='!') printf("!");
      if (p=='?') printf("?");
      if (p=='"') printf("'");
      if (p=='#') printf("#");
      if (p=='№') printf("№");
      if (p=='(') printf("(");
      if (p==')') printf(")");
      if (p=='%') printf("%");
      if (p=='$') printf("$");
      if (p=='.') printf(".");
      if (p=='*') printf("*");
      if (p=='-') printf("-");
      if (p=='+') printf("+");
      if (p=='&') printf("&");
      if (p=='/') printf("/");
      if (p=='<') printf("<");
      if (p=='>') printf(">");
      if (p=='{') printf("{");
      if (p=='}') printf("}");
      if (p==']') printf("]");
      if (p=='[') printf("]");
      if (p== 39) printf("'");//Апостроф
       p++;
      }      }
//=====================================================


if (b==2) {

printf("Введіть речення яке потрібно перекласти\n");
fflush(stdin);
gets (str);
n=strlen(str);
printf("Результат переведення\n");
for(i=0;i<n;i++) {
Rinox вне форума Ответить с цитированием
Старый 13.09.2009, 14:07   #2
Rinox
 
Регистрация: 13.09.2009
Сообщений: 3
По умолчанию

Продолжение... а то в первом посте всё не вместилось
Код:
  //Маленькі літери
      if (str[i]=='й') printf("y");
      if (str[i]=='ц') printf("ts");
      if (str[i]=='у') printf("u");
      if (str[i]=='к') printf("k");
      if (str[i]=='е') printf("e");
      if (str[i]=='н') printf("n");
      if (str[i]=='г') printf("h");
      if (str[i]=='ш') printf("sh");
      if (str[i]=='щ') printf("sch");
      if (str[i]=='з') printf("z");
      if (str[i]=='х') printf("kh");
      if (str[i]=='ї') printf("i");
      if (str[i]=='ф') printf("f");
      if (str[i]=='і') printf("i");
      if (str[i]=='в') printf("v");
      if (str[i]=='а') printf("a");
      if (str[i]=='п') printf("p");
      if (str[i]=='р') printf("r");
      if (str[i]=='о') printf("o");
      if (str[i]=='л') printf("l");
      if (str[i]=='д') printf("d");
      if (str[i]=='ж') printf("zh");
      if (str[i]=='є') printf("ie");
      if (str[i]=='я') printf("ia");
      if (str[i]=='ч') printf("ch");
      if (str[i]=='с) printf("s");
      if (str[i]=='м') printf("m");
      if (str[i]=='и') printf("y");
      if (str[i]=='т') printf("t");
      if (str[i]=='ь') printf("'");
      if (str[i]=='б') printf("b");
      if (str[i]=='ю') printf("iu");
      //Великі літери
      if (str[i]=='Й') printf("I");
      if (str[i]=='Ц') printf("Ts");
      if (str[i]=='У') printf("U");
      if (str[i]=='К') printf("K");
      if (str[i]=='Е') printf("E");
      if (str[i]=='Н') printf("N");
      if (str[i]=='Г') printf("H");
      if (str[i]=='Ш') printf("Sh");
      if (str[i]=='Щ') printf("Sch");
      if (str[i]=='З') printf("Z");
      if (str[i]=='Х') printf("Kh");
      if (str[i]=='Ї') printf("I");
      if (str[i]=='Ф') printf("F");
      if (str[i]=='І') printf("I");                                         
      if (str[i]=='В') printf("V");                                      
      if (str[i]=='А') printf("A");                                      
      if (str[i]=='П') printf("P");
      if (str[i]=='Р') printf("R");
      if (str[i]=='О') printf("O");
      if (str[i]=='Л') printf("L");
      if (str[i]=='Д') printf("D");
      if (str[i]=='Ж') printf("Zh");
      if (str[i]=='Є') printf("Ie");
      if (str[i]=='Я') printf("Ia");
      if (str[i]=='Ч') printf("Ch");
      if (str[i]=='С') printf("S");
      if (str[i]=='М') printf("M");
      if (str[i]=='Т') printf("T");
      if (str[i]=='Б') printf("B");
      if (str[i]=='Ю') printf("Iu");
      //Знаки
      if (str[i]==' ') printf(" "); //Пробіл
      if (str[i]=='!') printf("!");
      if (str[i]=='?') printf("?");
      if (str[i]=='"') printf("'");
      if (str[i]=='#') printf("#");
      if (str[i]=='№') printf("№");
      if (str[i]=='(') printf("(");
      if (str[i]==')') printf(")");
      if (str[i]=='%') printf("%");
      if (str[i]=='$') printf("$");
      if (str[i]=='.') printf(".");
      if (str[i]=='*') printf("*");
      if (str[i]=='-') printf("-");
      if (str[i]=='+') printf("+");
      if (str[i]=='&') printf("&");
      if (str[i]=='/') printf("/");
      if (str[i]=='<') printf("<");
      if (str[i]=='>') printf(">");
      if (str[i]=='{') printf("{");
      if (str[i]=='}') printf("}");
      if (str[i]==']') printf("]");
      if (str[i]=='[') printf("]");
      if (str[i]== 39) printf("'");//Апостроф
      }      }
	Getch();
fcloseall();
}
Rinox вне форума Ответить с цитированием
Старый 13.09.2009, 14:11   #3
Rinox
 
Регистрация: 13.09.2009
Сообщений: 3
По умолчанию

Собственно вот в этом месте
Код:
if (b==1) {

	//  відкриваємо файл
	FILE *f;

	f=fopen("D:\\Kyrsova\\read.txt", "r");
можно ли разрешить пользователю самостоятельно прописать местонахождения файла?
Rinox вне форума Ответить с цитированием
Старый 13.09.2009, 14:13   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
2)Можно ли обойтись без оператора if и сделать програму покороче, это конешно хорошо что в украинском языке 30 букв маленьких +30 большых + 10-15 символов, а если бы пришлось писать там где 100+ или больше, программа бы получалась очень большой. Существует ли возможность другого варианта написания, и как это сделать?
Можно. Загоняете все символы в два массива. Потом в цикле сравниваете:
Код:
for(k=0; k<N; k++)
 if(str[i]==mas1[k])
  {
   printf("%c",mas2[k]);
   break;
  }
Цитата:
можно ли разрешить пользователю самостоятельно прописать местонахождения файла?
Код:
char filename[200];
gets(filename);
f = fopen(filename,"r");
Цитата:
1)Хотелось бы узнать есть ли возможность на C сделать так что бы у пользователя была возможность определить файл для транслитерации самостоятельно. Как это сделать?
Видимо, нужно смотреть, есть ли в файле английские символы. Если да, то там транслит.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 13.09.2009, 14:50   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот пример алгоритма.
извините, что на Дельфи, думаю, идея понятна, перевести на С особого труда не составит:
Код:
{программа для переименования в транслит}
const
  table1='абвгдеёжзийклмнопрстуфхцчшщъыьэюяАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ';
  Table2 : array[1..66] of string =(
   'a','b','v','g','d','e','e','zh','z','i','i','k','l',
   'm','n','o','p','r','s','t','u','f','kh','ts','ch','sh',
   'shc','"','y','''','e','yu','ya ',
   'A','B','V','G','D','E','E','ZH','Z','I','I','K','L',
   'M','N','O','P','R','S','T','U','F','KH','TS','CH','SH',
   'SHC','"','Y','''','E','YU','YA '
);
...
   NewS := '';
   for i:=1 to Length(s) do
    if Pos(s[i],table1) > 0 then begin
       NewS := NewS + Table2[Pos(s[i],table1)];
       flWasChages := true
    end
    else
       NewS := NewS + s[i];
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Мимовольная транслитерация текста IdPOP3 в Indy 10 Роман Радер Работа с сетью в Delphi 4 18.05.2009 09:23
2 вопроса по графикам xaero93 Помощь студентам 2 23.04.2009 18:23
2 вопроса по ХП Molotok Windows 14 17.12.2008 12:43
2 вопроса по Delphi N!ckeL Помощь студентам 5 30.04.2008 17:12
Транслитерация WIC Microsoft Office Excel 3 04.10.2007 20:18