Заменить найденное слово в введенном тексте на порядковые числа в алфавите - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день очень нужна помощь по поводу работы с массивом 1)как искать слово во всех строках а не только в первой 2)как заменить найденное слово в введенном тексте на порядковые числа в алфавите 3)в строк в которой не было найдено слово ввести слово которое искали после 2го слова в строке (или может есть где-нибудь подобные задания?)
#include <stdio.h>
#include <string.h>
 
#define MAX 11
#define LEN 80
 
char text[MAX][LEN];
int d[LEN];
char word[LEN];
char w;
int i;
 
int main(void)
{
  register int t, i, j;
 
  printf("exit void str.\n");
 
  for(t=0; t<MAX; t++) {
    printf("%d: ", t);
    gets(text[t]);
    if(!*text[t]) break;              
  }
 
  for(i=0; i<t; i++) {
    for(j=0; text[i][j]; j++) putchar(text[i][j]);
    putchar('\n');
  }
      gets(word);
      if (strstr(*text,word) != NULL)
       printf("The word \"%s\" found\n",word);
          for(int i = 0; i < strlen(word); ++i) ;
             printf("\n%s\n", word);    
             w=strlen(word);
    
             for(i=0;i<w;i++)
    {
         if(word[i]=='a')
                        d[i]=1;
                 if(word[i]=='b')
                        d[i]=2;
                if(word[i]=='c')
                        d[i]=3;
                f(word[i]=='d')
            d[i]=4;
        if(word[i]=='e')
            d[i]=5;
        if(word[i]=='f')
            d[i]=6;
        if(word[i]=='g')
            d[i]=7;
        if(word[i]=='h')
            d[i]=8;
        if(word[i]=='i')
            d[i]=9;
        if(word[i]=='j')
            d[i]=10;
        if(word[i]=='k')
            d[i]=11;
        if(word[i]=='l')
            d[i]=12;
        if(word[i]=='m')
            d[i]=13;
        if(word[i]=='n')
            d[i]=14;
        if(word[i]=='o')
            d[i]=15;
        if(word[i]=='p')
            d[i]=16;
        if(word[i]=='q')
            d[i]=17;
        if(word[i]=='r')
            d[i]=18;
        if(word[i]=='s')
            d[i]=19;
        if(word[i]=='t')
            d[i]=20;
        if(word[i]=='u')
            d[i]=21;
        if(word[i]=='v')
            d[i]=22;
        if(word[i]=='w')
            d[i]=23;
        if(word[i]=='x')
            d[i]=24;
        if(word[i]=='y')
            d[i]=25;
        if(word[i]=='z')
            d[i]=26;
 
    }
    for(i=0;i<w;i++)
        printf("%d ",d[i]);
    printf("\n");
    printf("%s%s\n%S%S\n", d, strcpy(*text,word ));
    return 0;
}
заранее благодарен

Решение задачи: «Заменить найденное слово в введенном тексте на порядковые числа в алфавите»

textual
Листинг программы
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdlib.h>
 
#define MAX 11
#define LEN 80
 
char *chr2str(char *word)
{
  char result[(strlen(word)*4+3)];
  char *ptr;
  int i = 0;
  char charF, charS, temp;
  //int n;
 
  ptr = word;
  i = 0;
  while(*ptr) {
    if(isalpha(*ptr)) {
      temp = toupper(*ptr)-64;
      charF = temp / 10 + 48;
      charS = temp % 10 + 48;
      result[i] = '[';
      result[++i] = charF;
      result[++i] = charS;
      result[++i] = ']';
    }
    else {
      result[i]   = *ptr;
    }
    i++;
    ptr++;
  }
  result[i] = '\0';
  char *rptr = malloc(strlen(result) + 1);
  if(!rptr) { puts("Error: lack of memory");
              exit(1);                     }
  strcpy(rptr, result);
 
  return rptr;
}
      
void swap(char *text, char *word, int flag)
{
  char *ptr, *ptr2;
  ptr = strtok(text, " ");
  if (ptr) {
    if (!strcmp(ptr, word)) {
      ptr2 = chr2str(word);
      if (flag)
        printf("%c", ' ');
      printf("%s", ptr2);
      free(ptr2);
    }
    else {
      if(flag)
        printf("%c", ' ');
      printf("%s", ptr);
    }
    swap(NULL, word, 1);
  }
}
 
int main(void)
{
  char text[MAX][LEN];
  char word[LEN];
  register int t, i;
  char *ptr;
 
  puts("Enter text <exit void str>.");
  for (t=0; t<MAX; t++) {
    printf("%d: ", t);
    i = 0;
    while(i<LEN) {
      text[t][i] = getchar();
      if (text[t][i]=='\n') {
        text[t][i] = '\0';
      }
      if (text[t][i]=='\0')
        break;
      i++;
    }
    if(!*text[t]) break;
  }
 
  printf("\nEnter word: ");
  scanf("%s", word);
  puts("");
 
  for (i=0; i<t; i++) {
    if (strstr(text[i], word) != NULL) {
      swap(text[i], word, 0);
      puts("");
    }
    else {
      if (ptr = strtok(text[i], " ")) printf("%s", ptr);
      if (ptr = strtok(NULL, " ")) {
        printf(" %s", ptr);
    printf(" <%s>", word);
      }
      while (ptr = strtok(NULL, " ")) printf(" %s", ptr);
      puts("");
    }
  }
    
 
  return 0;
}

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

  1. Предполагается, что задача заключается в замене найденного слова в введенном тексте на порядковые числа в алфавите.
  2. В коде используются стандартные библиотеки: iostream, cctype, string.
  3. Вектор MAX содержит количество строк вводимого текста, а LEN - максимальную длину строки.
  4. Функция chr2str преобразует символ в строку, представляющую его порядковый номер в алфавите.
  5. Функция swap ищет указанное слово в строке и заменяет его на строку, представляющую его порядковый номер в алфавите.
  6. В функции main вводится текст и указывается слово для поиска.
  7. Введенный текст хранится в массиве строк text.
  8. Для каждой строки текста проверяется наличие указанного слова.
  9. Если слово найдено, то оно заменяется на строку, представляющую его порядковый номер в алфавите.
  10. Если слово не найдено, то оно выводится в оригинальной форме.
  11. Оставшиеся слова в строке выводятся без изменений.
  12. В конце программы выводится результат.

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


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

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

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