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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ПРисвоить указателю нулевое значение- кк? с поммощщю каких знаков и действий? http://www.cyberforum.ru/cpp-beginners/thread959341.html
Пожалуста, обьясните принцип. Такого присвоения.
C++ Не работает оперативная память озу Здраствуйте у меня стоит память : Kingston DDR3-1333 (667 МГц) 2 Гб. Купил новую Kingston DDR3-1333 4 Гб поставил и при загруске винди появляется синий экран,менял её в магазине но проблема не изчезла в чем может быть причина? http://www.cyberforum.ru/cpp-beginners/thread959336.html
Сброс битов C++
Вот такое условие. "Если в числе x установлен бит n и установлен бит m, то в числе y сбросить биты 3 и самый старший бит." Логически понятно, но как представить в виде кода С++. При помощи цикла.
C++ Алгоритм вычисления суммы ряда
Помогите написать алгоритм нахождения суммы ряда \sum_{K=O}^{\propto } \frac{{x}^{2k}}{{2}^{k}*2!}
C++ Вывод двоичного числа и сброска битов http://www.cyberforum.ru/cpp-beginners/thread959328.html
Примерно такого типа задача Написать программу на языке C++, читающую со стандартного ввода 4 десятичных числа x, y,m, n. Все смещения будут указываться начиная с младшего бита,начиная с 0. Если в числе x установлен бит n и установлен бит m, то в числе y сбросить биты 3 и самый старший бит. Программа должна вывести все исходные данные в десятичном виде, исходные и полученные значения x, y в...
C++ Вычислить количество чисел, кратных 3, и среднее арифметическое чисел, кратных 7 Задача 1. Использование инструкций для организации циклов (обработка целочисленных значений) Написать программу, в которой с клавиатуры вводится последовательность из n целых положительных чисел и вычисляется количество чисел кратных 3 и среднее арифметическое чисел кратных 7. Значение n должно вводиться с клавиатуры во время выполнения программы. При вводе значения n необходимо предусмотреть... подробнее

Показать сообщение отдельно
Jack Wade
62 / 35 / 6
Регистрация: 24.02.2013
Сообщений: 250

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

21.09.2013, 21:07. Просмотров 568. Ответов 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;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru