Заменить в предложении английские слова на их русские эквиваленты - C (СИ)
Формулировка задачи:
Пожалуйста,помогите!
При вводе предложения на английском (слова разделены "_") программа должна заменить слова на русские(имеется двоичный файл, структура-база данных со словами и их переводом (struct kom {char english[20]; char russian[20];} t1[N].
Не могу понять, как именно заменить слова на их русские эквиваленты
Вот,что у меня получилось(точнее - ничего не получилось)
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h> #include <locale.h> #define N 10 struct kom {char english[20]; char russian[20];} t1[N]; int main() {setlocale(LC_ALL, "rus"); FILE *tf; int i=0,j=0,k; char a[100],b[20]; tf=fopen("file1.dat","rb+"); printf("Введите предложение на английском языке:\n"); scanf("%s",a); for (k=0;k<strlen(a);k++) if (a[k]=='_') { b[j]=k; j++; } for(i=0;i<N;i++) for (k=0;k<strlen(a);k++) { if (strcmp(t1[i].english,a[i])==0) a[i]=t1[i].russian; printf("%s",a);}
Решение задачи: «Заменить в предложении английские слова на их русские эквиваленты»
textual
Листинг программы
#include <Windows.h> #include <stdio.h> #include <stdlib.h> struct word { char english[100]; char russian[100]; } words[100]; void LoadWords(FILE* infile, struct word * words, size_t * count) { char str[80]; char * ptrdelim; char *posnewline; while (fgets(str,80,infile)) { if ((posnewline = strchr(str, '\n')) != NULL) *posnewline = '\0'; ptrdelim = strchr(str,'-'); if (ptrdelim != NULL) { strncpy(words[(*count)].english, str, ptrdelim - str); strcpy(words[(*count)].russian, str + (ptrdelim - str + 1)); // printf("%s - %s\n", words[(*count)].english, words[(*count)].russian); } (*count)++; } fclose(infile); } void Replace(char * str, char * word, size_t position, size_t len) { char beg[100], end[100]; strncpy(beg, str, position); *(beg + position) = '\0'; strcpy(end, str + position + len); sprintf( str, "%s%s%s", beg, word, end); } void ChangeWords(char * str, struct word * words, size_t count) { char *start = NULL; struct word* word = words; for (; word < words + count; word++) { if ((start = strstr(str, word->english)) != NULL) { Replace(str, word->russian, start - str, strlen(word->english)); } } } int main() { size_t count = 0; FILE* infile; char fileName[100] = "Words.txt"; char str[] = "How can i extract a particular portion of a string?"; SetConsoleCP(1251); SetConsoleOutputCP(1251); infile = fopen(fileName, "r"); if (infile == NULL) { perror("Error in opening file for reading!"); return; } puts(str); LoadWords( infile, words, &count); ChangeWords(str, words, count); puts(""); puts(str); getchar(); return 0; }
Объяснение кода листинга программы
- Объединение функций
LoadWords
иChangeWords
вместе с функциейmain
обеспечивает выполнение задачи. - Функция
LoadWords
загружает слова из файла в массив структурword
. - Функция
ChangeWords
заменяет каждое вхождение подстроки в строкеstr
на соответствующую подстроку из массиваwords
. - В функции
main
используется функцияLoadWords
для чтения слов из файла и сохранение их в массивеwords
. - Затем используется функция
ChangeWords
для замены каждого вхождения подстроки в строкеstr
на соответствующую подстроку из массиваwords
. - В конце функция
main
выводит измененную строку на консоль. - Программа использует стандартное кодирование символов CP-1251 для ввода и вывода данных.
- Программа открывает файл
Words.txt
для чтения. - Если файл не может быть открыт, программа выводит сообщение об ошибке и завершает свое выполнение.
- В противном случае программа считывает содержимое файла в массив
words
и выполняет замену подстрок в строкеstr
. - После замены подстрок программа выводит измененную строку на консоль.
- Программа ожидает ввода данных с клавиатуры перед завершением своего выполнения.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д