Заменить найденное слово в введенном тексте на порядковые числа в алфавите - 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;
}
Объяснение кода листинга программы
- Предполагается, что задача заключается в замене найденного слова в введенном тексте на порядковые числа в алфавите.
- В коде используются стандартные библиотеки: iostream, cctype, string.
- Вектор
MAXсодержит количество строк вводимого текста, аLEN- максимальную длину строки. - Функция
chr2strпреобразует символ в строку, представляющую его порядковый номер в алфавите. - Функция
swapищет указанное слово в строке и заменяет его на строку, представляющую его порядковый номер в алфавите. - В функции
mainвводится текст и указывается слово для поиска. - Введенный текст хранится в массиве строк
text. - Для каждой строки текста проверяется наличие указанного слова.
- Если слово найдено, то оно заменяется на строку, представляющую его порядковый номер в алфавите.
- Если слово не найдено, то оно выводится в оригинальной форме.
- Оставшиеся слова в строке выводятся без изменений.
- В конце программы выводится результат.