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

Строки. Вывести на экран самую короткую группу из 0 и 1 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 5.00
WizardHarry
0 / 0 / 0
Регистрация: 22.02.2012
Сообщений: 33
19.09.2013, 21:38     Строки. Вывести на экран самую короткую группу из 0 и 1 #1
Дана строка, состоящая из групп нулей и единиц. Найти и вывести на экран самую короткую группу.
Попроще только, без #include <algorithm> #include <iterator>, как в похожем вопросе здесь, такое еще не учили.
Заранее спасибо)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.09.2013, 21:38     Строки. Вывести на экран самую короткую группу из 0 и 1
Посмотрите здесь:

C++ Определить самую длинную и самую короткую из введенных строк
C++ Строки. Вывести на экран самую короткую группу из 0 и 1.
Вывести все введенные строки. Отсортировать строки. Вывести самую длинную строку C++
C++ Структура: Для заданного автора вывести на экран его самую раннюю книгу и самую последнюю - по году издания.
В строке, состоящей из групп нулей и единиц, найти и вывести на экран короткую группу C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
22.09.2013, 10:33     Строки. Вывести на экран самую короткую группу из 0 и 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 <stdlib.h>
#include <conio.h>
 
int main(int argc, char* argv[])
{
    char str[256] = "000011111000011100000111111100000111111110000001111111\0";
 
    int max = 256, max_pos = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        int k = i;
        while (str[i] == str[i+1] && 
            str[i] != '\0') i++;
 
        int len = abs((k+1)-i);
        if (len < max) { max = len; max_pos = k; } 
    }
 
    printf("str = %s\nmax_pos = %d max_len = %d\n",str,max_pos,max);
 
    _getch();
 
    return 0;
}
http://codepad.org/yHDAPRC6
Миниатюры
Строки. Вывести на экран самую короткую группу из 0 и 1  
zitxbit
Master C/C++
 Аватар для zitxbit
86 / 738 / 75
Регистрация: 11.04.2012
Сообщений: 971
22.09.2013, 11:22     Строки. Вывести на экран самую короткую группу из 0 и 1 #3
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
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <ctype.h>
 
int main(int argc, char* argv[])
{
    char str[256] = "0000 11111 0000 111 00000 1111111 00000 11111111 000000 1111111\0";
 
    int max = 256, max_pos = 0;
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (isspace(str[i]) || str[i+1] == '\0')
        {
            int k = i-1;
            while (k >= 0 && !isspace(str[k])) k--;
            if (abs((k+1)-i) < max) { max = abs((k+1)-i); max_pos = k+1; }
        }
    }
 
    printf("str = %s\nmax_pos = %d max_len = %d\n",str,max_pos,max);
 
    _getch();
}
http://codepad.org/NDyJxa9j
Миниатюры
Строки. Вывести на экран самую короткую группу из 0 и 1  
WizardHarry
0 / 0 / 0
Регистрация: 22.02.2012
Сообщений: 33
22.09.2013, 12:01  [ТС]     Строки. Вывести на экран самую короткую группу из 0 и 1 #4
zitxbit, Благодарю)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
22.09.2013, 15:45     Строки. Вывести на экран самую короткую группу из 0 и 1 #5
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
#include <stdio.h>
#include <string.h>
 
int main ()
{
    char* p= (char*)"1111000001111000111110000000111110000000011111100000000";
 
    //Длина минимальной цепочки
    int min= strlen (p);
    
    //Указатель на нужную цепочку
    char* ts= p;
    
    //Количество символов в цепочке (промежуточная переменная)
    int kol_vo;
    
    while (*p) {
 
          
        //В этой точке p указывает на нулевой символ (0 или 1) очередной цепочки
        kol_vo= 0;
        do {
          kol_vo++; p++;
        }
        while (*p== *(p- 1));
        
       //Одним махом разберёмся с длиной цепочки и указателем на неё 
       if (kol_vo< min) 
          ts= p-(min= kol_vo);
    }
    
    
    //вывод    
    for (int i= 0; i< min; i++) printf ("%c", ts[i]); 
    
 
    getchar ();
    return 0;
}
Yandex
Объявления
22.09.2013, 15:45     Строки. Вывести на экран самую короткую группу из 0 и 1
Ответ Создать тему
Опции темы

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