С Новым годом! Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
1

Работа с символами

21.03.2018, 14:08. Показов 1857. Ответов 10
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Определить, являются ли все слова из потока символов словами одинаковой длины?
Для упрощения алгоритма наложим ограничения на разделители слов. Будем считать, что
слова в потоке символов разделяются пробелами, точками, запятыми, концом строки и
любыми их комбинациями. Следовательно, перенос слов между строками запрещён. Не допускается использование библиотек
работы с символьными строками. Также должны быть использованы символические константы.
Программа должна быть примерно такая:
Пример:
Задача. В потоке символов сосчитать число слов, заканчивающихся на две одинаковых
буквы.
Программа, реализующая данную задачу, представлена ниже.
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
#include <stdio.h>
// определение символических констант
#define YES 1
#define NO 0
void main( void )
{
int c; // текущий символ из потока
int prev_c; // предыдущий символ
int flag; // признак слова
int cnt; // счётчик
int found; // признак того, что буквы повторились
// начальные присваивания (инициализация переменных)
cnt = 0;
flag = NO;
found = NO;
prev_c = ' ';
// цикл чтения символов из потока, связанного с клавиатурой
while( (c = getchar()) != EOF )
{
if( c == ' ' || c == '.' || c == '\n' || c == ',' )
{
// найден разделитель
if( flag == YES )
{
// найден первый разделить после слова
if( found == YES )
{
// две последних буквы в слове были 
// одинаковы
cnt = cnt + 1;
}
}
flag = NO;
}
else
{
// найдена буква
// проверка совпадения текущего и предыдущего символов
if( prev_c == c )
found = YES;
else
found = NO;
flag = YES;
}
prev_c = c;
}
printf("number of words = %d\n", cnt );
}
Добавлено через 14 минут
Можете помочь?

Добавлено через 14 часов 17 минут
Вот это нашел, подходит:
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
#include <stdio.h>
 
#define PROBEL ' '
 
 
int main()
{
    char str[255];
    char sym = 0;
    int ptr = 0;
    int inWord = 0; // inWord
    int countWord = 0;
    int countSyminWord = 0;
    
    while ((sym=getchar())!='\n')
    {
        if (sym == PROBEL)
            inWord = 0;
        else
        {
            if (!inWord)
            {
                inWord = 1;             
                if (countWord > 0)
                    printf("Number word #:[%3d] %30s [%3d] <=Length word\n", countWord, str, countSyminWord);
                for(; ptr>0; ptr --)
                    str[ptr]=0;
                ptr = 0;
                countSyminWord = 0;
                countWord++;
                
            }
        }
        if (inWord) 
            countSyminWord++;       
        str[ptr++] = sym;   
    }   
    printf("Number word #:[%3d] %30s [%3d] <=Length word\n", countWord, str, countSyminWord);
                                
    return 0;
}
Добавлено через 3 часа 21 минуту
Никто ничего не знает насчет этой задачи?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
21.03.2018, 14:08
Ответы с готовыми решениями:

Работа с символами - СИ
Помогите написать код, пожалуйста 1.1. Для целого числа N (32 ≤ N ≤ 126) вывести...

Работа с символами
У меня очень серьезные проблемы с кодом. #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Работа с символами
а ) подсчитывает количество цифр в тексте ; б) выводит на экран слова , начинающиеся с согласных...

Работа с символами
Написать программу выводящую символы ASCII с заданными кодами. Cамо задание: Вывести на экран...

10
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.03.2018, 16:03 2
Цитата Сообщение от aleksskay4 Посмотреть сообщение
Вот это нашел, подходит
Раз подходит, тогда в чём вопрос?
0
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
21.03.2018, 16:09  [ТС] 3
Это вопрос.

Добавлено через 1 минуту
Как мне ее изменить так чтобы она просто сообщала одинаковой длины или нет?
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.03.2018, 16:19 4
Цитата Сообщение от aleksskay4 Посмотреть сообщение
Как мне ее изменить так чтобы она просто сообщала одинаковой длины или нет?
Сохранить длину первого слова, затем сравнивать с ней длины всех последующих слов. При неравенстве устанавливать флаг.
0
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
21.03.2018, 16:23  [ТС] 5
Цитата Сообщение от likehood Посмотреть сообщение
Сохранить длину первого слова, затем сравнивать с ней длины всех последующих слов. При неравенстве устанавливать флаг.
Это я понимаю. Но как осуществить в языке C, непонятно.
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.03.2018, 16:32 6
Идея такая:
C
1
2
3
4
5
6
7
8
9
10
11
12
int len = -1; // длина первого слова
int differentLength = 0; // признак того, что длины слов не совпадают
 
// где-то в цикле
if (len < 0)
    len = countSyminWord;
else if (len != countSyminWord)
    differentLength = 1;
 
// в конце программы
if (differentLength) puts("NO");
else puts("YES");
0
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
21.03.2018, 20:05  [ТС] 7
Так сделал, но чудить.
При вводе примерно такого: re, re red.
Выдает :Yes
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// ConsoleApplication1.cpp: определяет точку входа для консольного приложения.
//
#include <stdio.h>
#include "stdafx.h"
 
 
 
// определение символических констант
#define YES 1
#define NO 0
void main(void)
{
    int c; // текущий символ из потока
    char str[255];
    char sym = 0;
    int ptr = 0;
    int inWord = 0; // inWord
    int countWord = 0;
    int countSyminWord = 0; 
    int ravni = 0;
    int ravStrok = "NoStrok";
 
    int len = -1; // длина первого слова
    int differentLength = 0; // признак того, что длины слов не совпадают
 
                             // где-то в цикле
    
    // цикл чтения символов из потока, связанного с клавиатурой
    while ((c = getchar()) != '\n')
    {
        if (c == ' ' || c == '.' || c == '\n' || c == ',')
        {
            // найден разделитель
            
            {
                    inWord = 0;
            }
            
        }
        else
        {
            if (!inWord)
            {
                inWord = 1;
                if (countWord > 0)
                {
                    if (len < 0)
                        len = countSyminWord;
                    else if (len != countSyminWord)
                        differentLength = 1;
                }
                    
                for (; ptr>0; ptr--)
                    str[ptr] = 0;
                ptr = 0;
                countSyminWord = 0;
                countWord++;
            }       
        }
        if (inWord)
            countSyminWord++;
        str[ptr++] = sym;
  }
 
    // в конце программы
    if (differentLength) puts("NO");
    else puts("YES");
 
    system("pause");
        
    }
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.03.2018, 20:50 8
Так ведь в исходной программе в 38 строке идёт дополнительная обработка последнего слова. Это тоже нужно учесть.
0
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
21.03.2018, 20:53  [ТС] 9
И что мне делать?
туда написать это:
C
1
2
3
4
 if (len < 0)
                        len = countSyminWord;
                    else if (len != countSyminWord)
                        differentLength = 1;
0
1272 / 1029 / 470
Регистрация: 25.12.2016
Сообщений: 3,333
21.03.2018, 21:51 10
Цитата Сообщение от aleksskay4 Посмотреть сообщение
И что мне делать?
туда написать это:
Можно попробовать.
1
71 / 68 / 46
Регистрация: 02.12.2015
Сообщений: 890
Записей в блоге: 1
23.03.2018, 17:04  [ТС] 11
Благо дарю.
0
23.03.2018, 17:04
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.03.2018, 17:04
Помогаю со студенческими работами здесь

Работа с символами
.... set tmp=%~d0% set tmp=%tmp:~0,1% set Partition=2 ... допустим tmp=H . Возможно ли...

Работа с символами
Доброго времени суток,нужна ваша помощь. Помогите переделать программу так,чтобы мы использовали...

Работа с символами
среда программирования Visual C++ объектно-ориентированный Здравствуйте. Люди такой вопрос как...

Работа с символами
Получить строку «Pascal» из строки «ABC Pascal» Добавлено через 4 минуты var a,b,c:string;...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru