Найти в строке слова, отличные от последнего - C (СИ)

  1. помогите пожалуйста. надо сделать так чтоб отличны от последнего слова , и в слове гласные буквы (a, e, i, o, u) не чередуются с согласнымиC1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> #include <locale.h> int main() { char *ch;   char str[1000];   char mas[50][9]; char q, z, b; char glas[] = "aeiou"; int i, l, j, e; int k = 0; do { setlocale(LC_ALL, "rus"); printf("Дана последовательность, содержащая от 2 до 50 слов, в каждом из которых от 1 до 8 строчных латинских букв; между соседними словами - не менее одного пробела, за последним словом - точка. Напечатать те слова последовательности, которые отличны от первого  слова и удовлетворяют следующему свойству:\n\n"); printf("36)в слове гласные буквы (a, e, i, o, u) чередуются с согласными;"); printf("\nВведите строку:\n"); gets(str); l = strlen(str); ch = strtok(str, " ."); for (i = 0; ch != '\0'; i++) { if (strlen(ch) > 8) { printf("Ошибка!\n"); system("pause"); break; } strcpy(mas[i], ch); ch = strtok(NULL, " ."); k++; } printf("\nРезультат :\n"); printf("последнее слово: %s \n \n Строка :", mas[0]); for (i = 1; i < k; i++) { if (strcmp(mas[i], mas[0]) != 0) { e = 0; for (j = 0; j<(strlen(mas[i]) - 1); j++) { z = mas[i][j];   b = mas[i][j + 1];   if ((strchr(glas, b) && strchr(glas, z) || (strchr(glas, z) && strchr(glas, b)))) { e++; }   } { if (e == 0) printf(" %s", mas[i]); } }   }   printf("\nДля выхода нажмите Esc"); printf("\n\n\n\n"); q = getch(); } while (q != 27); }


textual

Код к задаче: «Найти в строке слова, отличные от последнего - C (СИ)»

#include <stdio.h>
 #include <string.h>
 #include <stdlib.h>
 #include <locale.h>
 int main()
 {
 char *ch;
 
 char str[1000];
 
 char mas[50][9];
 char q, z, b;
 char glas[] = "aeiou";
 int i, l, j, e;
 int k = 0;
 do
 {
 setlocale(LC_ALL, "rus");
 printf("Г„Г*Г*Г* ïîñëåäîâГ*òåëüГ*îñòü, ñîäåðæГ*Г№Г*Гї îò 2 äî 50 ñëîâ, Гў ГЄГ*æäîì ГЁГ§ êîòîðûõ îò 1 äî 8 ñòðî÷Г*ûõ Г«Г*ГІГЁГ*Г±ГЄГЁГµ ГЎГіГЄГў; ìåæäó ñîñåäГ*èìè ñëîâГ*ìè - Г*ГҐ ìåГ*ГҐГҐ îäГ*îãî ïðîáåëГ*, Г§Г* ïîñëåäГ*ГЁГ¬ ñëîâîì - òî÷êГ*. ГЌГ*ГЇГҐГ·Г*ГІГ*ГІГј ГІГҐ ñëîâГ* ïîñëåäîâГ*òåëüГ*îñòè, êîòîðûå îòëè÷Г*Г» îò ïåðâîãî ñëîâГ* ГЁ óäîâëåòâîðÿþò ñëåäóþùåìó ñâîéñòâó:\n\n");
 printf("36)Гў ñëîâå ГЈГ«Г*Г±Г*ûå ГЎГіГЄГўГ» (a, e, i, o, u) ÷åðåäóþòñÿ Г± ñîãëГ*Г±Г*ûìè;");
 printf("\nÂâåäèòå ñòðîêó:\n");
 gets(str);
 l = strlen(str);
 ch = strtok(str, " .");
 for (i = 0; ch != '\0'; i++)
 {
 if (strlen(ch) > 8)
 {
 printf("ГЋГёГЁГЎГЄГ*!\n");
 system("pause");
 break;
 }
 strcpy(mas[i], ch);
 ch = strtok(NULL, " .");
 k++;
 }
 printf("\nÐåçóëüòГ*ГІ :\n");
 printf("ïîñëåäГ*ГҐГҐ ñëîâî: %s \n \n ÑòðîêГ* :", mas[k-1]);
 for (i = 0; i < k; i++)
 {
 if (strcmp(mas[i], mas[k-1]) != 0)
 {
 e = 0;
 for (j = 0; j<(strlen(mas[i]) - 1); j++)
 {
 z = mas[i][j];
 
 b = mas[i][j + 1];
 
 if ((strchr(glas, b) && strchr(glas, z) || (strchr(glas, z) && strchr(glas, b))))
 {
        e++;
 }
if ((strchr(glas, b)==NULL && strchr(glas, z)==NULL || (strchr(glas, z)==NULL && strchr(glas, b)==NULL)))
 {
        e++;
 }  
 
 }
 {
 if (e != 0)
 printf(" %s", mas[i]);
 }
 }
 
 }
 
 printf("\nÄëÿ âûõîäГ* Г*Г*æìèòå Esc");
 printf("\n\n\n\n");
 q = getch();
 } while (q != 27);
 }

СДЕЛАЙТЕ РЕПОСТ

5   голосов, оценка 3.800 из 5



Похожие ответы
  1. Перед каждой цифрой в строке вставить символ «N». СИ

  1. Нужно задать строку из букв, цифр и так далее и сделать так, чтобы программа вывела на экран каких гласных букв нет в этой строке. Помогите либо начать, либо направьте где можно почитать про это, на форуме может кто видел подобные задания? Заранее спасибо!

  1. Приветствую, ув. программисты, помогите пожалуйста с программкой. Задание: Разработать программу обработки строки символов в соответствии с заданным вариантом(Найти самое короткое слово). Считать, что строка оканчивается точкой, слова разделены пробелами. В программе предусмотреть ввод и вывод исходных данных и результатов

  1. Необходимо модифицировать данную функции, чтобы она указывала на индекс последнего вхождения слова в строке. То есть, если строка - Cyber Forum is Cyber Forum, а искомое слова Cyber, то она не должна выдавать 0.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 int searchWord(const char str[81], const char word[21]) /* Входные данные: str – исходная строка word – искомое  слово   Выходные данные: возвращаемое значение - индекс первого вхождения искомого слова в строку; возвращает -1, если слово не найдено */ {     int i = 0;     while (str)     {           const char* s1 = str;         const char* p1 = word;           while (*s1 == *p1)         {               s1++; p1++;             if (*p1 == '\0' || *s1 == '\0')break;           }         if (*p1 == '\0') return i;         if (*s1 == '\0') return -1;         str++;         i++;     }     return -1; }

  1. Доброго времени суток! Задача: написать программу, которая печатает содержимое своего ввода, помещая по одному слову на строке. Написал такой вариант:C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include main() {   int c, p = 0;   char n = '\n';   while ( (c = getchar()) != EOF)   {     if ((c == '\t' || c == ' ') && ( p == 0)) /* печатаем \n только если счетчик на нуле*/     {            p++;        putchar(n);     }             else       {         putchar(c); /* введен не пробел и не табуляция - обнуляем p */         p = 0;        }                  }     return 0; }Условие в if для тех случаев, когда пробелов или табуляций несколько подряд. Однако, работает только если пробелов 1 или 2 (подряд). Помогите разобраться!

  1. Дан текст, содержит от 2 до 30 слов, в каждом из которых от 2 до 10 латинских букв; между соседними словами - не менее одного пробела. Написать все слова, отличные от последнего слова, предварительно преобразовав каждое из них по следующему правилу: 1) перенести первую букву в конец слова; 2) перенести последнюю букву в начало слова.

  1. Добрый вечер! Не подскажите где ошибка? При запуске программы вылезает окно с ошибкой. Вроде часть где массив заполняется верна. Само задание: В заданном массиве A[N][N] найдите суммы элементов в каждой строке. Сформируйте одномерный массив S[N], содержащий полученные суммы, расположенные в порядке возрастания.C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 #define _CRT_SECURE_NO_WARNINGS #include #include #include int main() {   int **a;  // указатель на массив   int n,sum ;   printf("Enter n: ");     scanf("%i", &n);    int i=0, j=0;     a = (int**)malloc(n * sizeof(int));   // Ввод элементов массива   for (i = 0; i

  1. Не понимаю как работать с строками... У меня есть задача... Во входной строке записаны целые числа через запятую. Найдите их сумму. ВХОДНЫЕ ДАННЫЕ Программа получает на вход строку, содержащую цифры, знаки +/- и запятые. Необходимо разбить эту строку по запятым на числа и вычислить их сумму. Длина строки не превосходит 1000 символов. Строка содержит хотя бы одно число, начинается и заканчивается не с запятой, никакие две запятые не идут подряд. Между двумя соседними запятыми записано корректное целое число, не превосходящее по модулю 106106, которое может начинаться со знака "+" или "-".Ввод: 12,-5,+8 Вывод: 15 Получилось только так... но это неправильно (условие задачи совсем другое) C++1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include #include   using namespace std;   int main(){     string str;     int sum = 0;     cin >> str;     cout << endl;     for(int i = 0; i < str.length(); i++){         if (str[i] == ',')         {             i++;         }         sum += (int)str[i] - 48;     }     cout << sum << endl;       return 0;     }

  1. Помогите пожалуйста, найти в строке кратчайшее симметрическое слово.

  1. Все Работает если вводить без пробелов, но с пробелом выводится только первое число, (если можно с кратким объяснением пожалуйста)C1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include #include     int main(){       char str[100];     int x = 0;     scanf("%s", str);     for(int i = 0;i < strlen(str);i++)     {         if((str[i] >= '1') && (str[i] <= '9'))         {             x += ((int)str[i] - 48);                     }     }     printf("%d", x);       return 0; }