Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
21.09.2013, 21:07     Поиск слов с одинаковыми 1-й и последней буквой #1
Здравствуйте!
Помогите пожалуйста решить данную задачу...
"Программа должна искать слова в строке, с одинаковыми 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.09.2013, 21:07     Поиск слов с одинаковыми 1-й и последней буквой
Посмотрите здесь:

Строка - кол-во слов с опред. буквой C++
Определить количество слов, заканчивающихся буквой а C++
Удалить из слова все буквы, совпадающие с последней буквой. C++
Выделение слов с одинаковой первой и последней буквой C++
C++ Дана последовательность слов. Найти кол-во слов начинающихся с d и кончающихся буквой w
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
21.09.2013, 21:13     Поиск слов с одинаковыми 1-й и последней буквой #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
Миниатюры
Поиск слов с одинаковыми 1-й и последней буквой  
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
21.09.2013, 21:36  [ТС]     Поиск слов с одинаковыми 1-й и последней буквой #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;
}
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
21.09.2013, 21:51     Поиск слов с одинаковыми 1-й и последней буквой #4
C++
1
23 if (str[i != 0 ? i+1 : i] == str[k-1]) count++;
Jack Wade
61 / 34 / 6
Регистрация: 24.02.2013
Сообщений: 250
21.09.2013, 21:55  [ТС]     Поиск слов с одинаковыми 1-й и последней буквой #5
Цитата Сообщение от zitxbit Посмотреть сообщение
if (str[i != 0 ? i+1 : i] == str[k-1]) count++;
если честно-я не совсем понимаю данный кусок кода...
Что делает вопрос?
Что делает двоеточие?
Можете прокомментировать, что и как делает данный кусок кода(в частности-что означает "i != 0 ? i+1 : i")?
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
21.09.2013, 21:58     Поиск слов с одинаковыми 1-й и последней буквой #6
проверка если i равно 0 ("нулевой индекс" - начало строки), то берется элемент массива str[0], иначе если индекс не равен нулю, то берется элемент стоящий после элемента str[i].
Yandex
Объявления
21.09.2013, 21:58     Поиск слов с одинаковыми 1-й и последней буквой
Ответ Создать тему
Опции темы

Текущее время: 14:33. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru