Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
Jack Wade
65 / 38 / 14
Регистрация: 24.02.2013
Сообщений: 250
1

Поиск слов с одинаковыми 1-й и последней буквой

21.09.2013, 21:07. Просмотров 681. Ответов 5
Метки нет (Все метки)

Здравствуйте!
Помогите пожалуйста решить данную задачу...
"Программа должна искать слова в строке, с одинаковыми 1-й и последней буквой слова, и выводит их кол-ство на экран. В строке, после каждого знака запятой, выводить символ "P". Использовать не более 1-го массива символов".
Как бы, задача простая(по логике), но вот, у меня всё равно, не подсчитываются слова...
С буквами-легко, а вот слова...
Вот то, что у меня вышло:
Кликните здесь для просмотра всего текста

Кликните здесь для просмотра всего текста

Я не нашёл другого более "простого" решения, чем приравнивание int Begin=sizeof(int)(дабы иметь возможность подсчитывать с 1-го символа).

C++
1
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
#include "stdafx.h"
//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
//Для использования strlen
#include <conio.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    printf("Enter stroka:\n");
    char String1[BUFSIZ];
    //Исходная строка
    gets(String1);
    //Получение исходной строки
 
    int Begin, Result;//Переменные начала и конца слова
 
    Begin=sizeof(int);//альтернатива - Begin=strlen(String1)+1;//Т.е. на 1 символ больше, чем вся длинна строки...
    //Указываем максим. размер Begin(дабы эта переменная сперва сравнивалась с размером int(т.к. наврядли, пользователь будет вводить такую длинную строку), и если Begin==sizeof(int), тогда...
    //Begin равен началу слова(просто, в задании говорилось о том, что нужно использовать лишь массив символов, и другого решения я не придумал, как ограничить "указание на начало"(дабы каждый i-й символ
    //в Begin не заносился...)...
    Result=0;
    //Изначально, слов с одинаковыми 1-й и последней буквой ноль(0)
 
    for (int i=0; i<strlen(String1); i++)
    {
        if (String1[i]!=',' || String1[i]!='.' || String1[i]!='!' || String1[i]!=' ' && Begin==sizeof(int))
            //Если i-й символ "не конец слова", и Begin "не пуст"(т.е. в программе я поставил ограничение в виде sizeof(int)), тогда...
        {
            Begin=i;
            //Номер i - и есть начало символа
        }
        if (String1[i]==',' || String1[i]=='.' || String1[i]=='!' || String1[i]==' ' && Begin!=sizeof(int))
        {
            if (String1[Begin]==String1[i-1]){ Result++; Begin=sizeof(int); }
            //Если Begin-й символ равен прошлому символу по i(т.е. i-й символ, у нас же, уже не слово, значит, прошлый символ-конец слова), тогда...
            //Идёт наращивание переменной результата на единицу, и, "обнуление" переменной Begin(опять же, дабы можно было организовать поиск след. начало слова)...
//альтернатива - if (String1[Begin]==String1[i+1])/*при условии, что (if (String1[i+1]==',' ... && ...))*/ ...
        }
        printf("%c", String1[i]);
        //Отображение i-го символа на экране
        if (String1[i]==',') printf("P");
        //Если данный(i-й) символ - запятая, тогда отобразить на экране символ Р
    };
    printf("\n%d\n", Result);
    //Отображение результата подсчёта слов с одинаковыми 1-й и последней буквами
    _getch();
    //Ожидание ввода символа
 
    return 0;
}


Добавлено через 11 минут
Вот, немного изменил код(теперь, сравнивается переменная типа char с i-м символов в строке)... Вроде бы, одно слово, находит(использовал пример "lol, pop"(т.е. находит лишь слово "lol"...)...
Однако, сравнение идёт лишь в том случае, когда после слова стоит запятая...
Проверил на примере "lol, lol,"...
Кликните здесь для просмотра всего текста

C++
1
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
#include "stdafx.h"//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <conio.h>
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    printf("Enter stroka:\n");
    char String1[BUFSIZ];
    gets(String1);
 
    char b=NULL;
    int Result=0;
 
    for (int i=0; i<strlen(String1)+1; i++)
    {
        printf("%c", String1[i]);
            if (String1[i]==',') printf("P");
 
        if ((String1[i]!=',' || String1[i]!='.' || String1[i]!='!' || String1[i]!=' ') && (b==NULL))
            {
                b=String1[i];
            }
 
        if ((String1[i+1]==',' || String1[i+1]=='.' || String1[i+1]=='!' || String1[i+1]==' ') && (b!=NULL) && (b==String1[i]))
            {
                printf("\n! ! ! SRAVNENIE = %c + %c\n", b, String1[i]);
                Result++;
                b==NULL;
            }
 
    };
    printf("\n%d\n", Result);
    _getch();
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 21:07
Ответы с готовыми решениями:

Выделение слов с одинаковой первой и последней буквой
Подскажите пожалуйста как можно реализовать? вот код который имею (переносы...

Определить количество слов строки заканчивающихся последней буквой алфавита
Дана строка символов, разделенных пробелами, запятыми, точками. Определить...

Дана последовательность слов. Найти кол-во слов начинающихся с d и кончающихся буквой w
Кто может, помогите, пожалуйста. Использование указателей при работе со...

Дан набор слов, разделенных точкой с запятой. Определить сколько в нем слов, заканчивающихся буквой 'а'
Дан набор слов, разделенных точкой с запятой ( ; ). Набор заканчивается...

Удалить из слова все буквы, совпадающие с последней буквой.
Помогите решить задачу! Удалите из слова все буквы, совпадающие с последней...

5
zitxbit
90 / 742 / 279
Регистрация: 11.04.2012
Сообщений: 971
21.09.2013, 21:13 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
    char str[256] = "apple,fruit!agenda sweets\0";
 
    char pchars[] = ",.! "; int count = 0;
    for (int i = 0; str[i] != '\0'; i++)
        if (strchr(pchars,str[i]) || i == 0)
        {
            int k = i+1;
            while (!strchr(pchars,str[k]) && 
                str[k] != '\0') k++; 
 
            if (str[i+1] == str[k-1]) count++;
        }
 
    printf("str = %s\ncount = %d\n",str,count);
 
    _getch();
 
    return 0;
}
http://codepad.org/G8yZmmtR
3
Миниатюры
Поиск слов с одинаковыми 1-й и последней буквой  
Jack Wade
65 / 38 / 14
Регистрация: 24.02.2013
Сообщений: 250
21.09.2013, 21:36  [ТС] 3
zitxbit, конечно спасибо, однако, когда я сам ввожу текст через gets, у меня, всё равно, результат 1, даже с вашим кодом...
Кликните здесь для просмотра всего текста

C++
1
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
//Было введено следующее: "ada, sens, lazerul, pop" - результат 3(т.е. последнее слово-не определяется)...
//Даже, если вводить "lol, pop, ada, "-результат будет 2(хотя, должен быть 3)...
#include "stdafx.h"//#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <conio.h>
#include <string.h>
 
int main(int argc, char* argv[])
{
    char str[256];
 
    gets(str);//Получение строки с клавиатуры
 
    char pchars[] = ",.! "; 
    int count = 0;
 
    for (int i = 0; str[i] != '\0'; i++)
        if (strchr(pchars,str[i]) || i == 0)
        {
            int k = i+1;
            while (!strchr(pchars,str[k]) &&  str[k] != '\0') k++; 
            if (str[i+1] == str[k-1]) count++;
        }
 
    printf("str = %s\ncount = %d\n",str,count);
 
    _getch();
 
    return 0;
}
0
zitxbit
90 / 742 / 279
Регистрация: 11.04.2012
Сообщений: 971
21.09.2013, 21:51 4
C++
1
23 if (str[i != 0 ? i+1 : i] == str[k-1]) count++;
1
Jack Wade
65 / 38 / 14
Регистрация: 24.02.2013
Сообщений: 250
21.09.2013, 21:55  [ТС] 5
Цитата Сообщение от zitxbit Посмотреть сообщение
if (str[i != 0 ? i+1 : i] == str[k-1]) count++;
если честно-я не совсем понимаю данный кусок кода...
Что делает вопрос?
Что делает двоеточие?
Можете прокомментировать, что и как делает данный кусок кода(в частности-что означает "i != 0 ? i+1 : i")?
0
zitxbit
90 / 742 / 279
Регистрация: 11.04.2012
Сообщений: 971
21.09.2013, 21:58 6
проверка если i равно 0 ("нулевой индекс" - начало строки), то берется элемент массива str[0], иначе если индекс не равен нулю, то берется элемент стоящий после элемента str[i].
3
21.09.2013, 21:58
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.09.2013, 21:58

Написать программу, удаляющую из текста все буквы, совпадающие с его последней буквой
Нужно написать программу, удаляющую из текста все буквы, совпадающие с его...

Посчитать количество слов с буквой а
Ребята, помогите, пожалуйста))) В чём ошибка? Задание: Задан текст. Необходимо...

Строка - количество слов с определенной буквой
Всем привет! Имеется такая задачка: Дана строка, состоящая из 8 слов,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru