Заменить в предложении английские слова на их русские эквиваленты - 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;
}

Объяснение кода листинга программы

  1. Объединение функций LoadWords и ChangeWords вместе с функцией main обеспечивает выполнение задачи.
  2. Функция LoadWords загружает слова из файла в массив структур word.
  3. Функция ChangeWords заменяет каждое вхождение подстроки в строке str на соответствующую подстроку из массива words.
  4. В функции main используется функция LoadWords для чтения слов из файла и сохранение их в массиве words.
  5. Затем используется функция ChangeWords для замены каждого вхождения подстроки в строке str на соответствующую подстроку из массива words.
  6. В конце функция main выводит измененную строку на консоль.
  7. Программа использует стандартное кодирование символов CP-1251 для ввода и вывода данных.
  8. Программа открывает файл Words.txt для чтения.
  9. Если файл не может быть открыт, программа выводит сообщение об ошибке и завершает свое выполнение.
  10. В противном случае программа считывает содержимое файла в массив words и выполняет замену подстрок в строке str.
  11. После замены подстрок программа выводит измененную строку на консоль.
  12. Программа ожидает ввода данных с клавиатуры перед завершением своего выполнения.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы