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

Строки с типом char * в С++ - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.76
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
19.11.2011, 17:29     Строки с типом char * в С++ #1
Помогите написать программу по строкам c++
При написании программ использовать нуль–терминированные строки и работать только с типом char *. Длина каждой строки не превосходит 300 символов.
Строка состоит из слов, разделенных одним или несколькими пробелами. Среди слов, состоящих только из цифр, найти слово, содержащее максимальное число нулей. Если таких слов больше одного, найти предпоследнее из них.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5914 / 3351 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
19.11.2011, 21:37     Строки с типом char * в С++ #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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <string.h>
#include <ctype.h>
 
int is_number(const char *str)
{
    int i;
    int len = strlen(str);
    for(i = 0; i < len; i++)
        if (! isdigit(str[i]))
            return 0;
    return 1;
}
 
int symbol_count(const char *str, const char ch)
{
    int count = 0;
    int i;
    int len = strlen(str);
    for(i = 0; i < len; i++)
        if (str[i] == ch)
            count++;
    return count;
}
 
int main(void)
{
    char str[] = "123 123 123 23400   23404040 23 43 sdf 4230040 1234";
    char *delimiter = " ";
    char *s = strtok(str, delimiter);
    char max[80] = {'\0'};
    while (s != NULL)
    {
        if (is_number(s))
            if (symbol_count(max, '0') < symbol_count(s, '0'))
                strcpy(max, s);
        s = strtok(NULL, delimiter);
    }
    puts(max);
    getchar();
    return 0;
}
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 19:46  [ТС]     Строки с типом char * в С++ #3
спасибо большое, а можно еще сделать ввод строки вручную в этой проге?

Добавлено через 3 часа 34 минуты
если можно, то помогите реализовать пожалуйста

Добавлено через 1 час 26 минут
срочно нужно
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 19:48     Строки с типом char * в С++ #4
C
1
2
3
char *s;
s=(char*)malloc(1000);
scanf ("%s",s);
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 19:53  [ТС]     Строки с типом char * в С++ #5
это вставлять вместо строки с иницализацией
C++
1
char str[] = "123 123 123 23400   23404040 23 43 sdf 4230040 1234";
?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 19:55     Строки с типом char * в С++ #6
Алексей_123, да, и переменную назови не s, а str

Добавлено через 46 секунд
И библиотеку подключи
C
1
#include <stdlib.h>
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 20:02  [ТС]     Строки с типом char * в С++ #7
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
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include <stdlib.h>
int is_number(const char *str)
{
        int i;
        int len = strlen(str);
        for(i = 0; i < len; i++)
                if (! isdigit(str[i])) //возвращает ненулевое значение, если ее аргумент ch является цифрой, т.е. попадает в диапазон 0-9. В противном случае возвращается нуль.
 
                        return 0;
        return 1;
}
 
int symbol_count(const char *str, const char ch)
{
        int count = 0;
        int i;
        int len = strlen(str);
        for(i = 0; i < len; i++)
                if (str[i] == ch)
                        count++;
        return count;
}
 
int main(void)
{       
        char *str;
        str=(char*)malloc(1000);
        scanf ("%str",str);
        char *delimiter = " ";
        char *s = strtok(str, delimiter);
        char max[80] = {'\0'};
        while (s != NULL)
        {
                if (is_number(s))
                        if (symbol_count(max, '0') < symbol_count(s, '0'))
                                strcpy(max, s);
                s = strtok(NULL, delimiter);
        }
        puts(max);
        getchar();
        return 0;
}
оно не находит число с максимальным количестовм нулей(

Добавлено через 1 минуту
просто выписывает первое введенное слово, если в нем присутствует 0
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 20:05     Строки с типом char * в С++ #8
замените
C
1
2
3
4
char *str;
                str=(char*)malloc(1000);
fflush (stdin);
gets (str);
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 20:09  [ТС]     Строки с типом char * в С++ #9
заменить вот этот участок?
C++
1
2
3
 char *str;
                str=(char*)malloc(1000);
                scanf ("%str",str);
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 20:12     Строки с типом char * в С++ #10
Алексей_123, да, просто scanf вводит до пробела
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 20:17  [ТС]     Строки с типом char * в С++ #11
go, большое спасибо, а fflush (stdin); позволяет вводить слова с любым количеством пробелов?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 20:26     Строки с типом char * в С++ #12
Алексей_123, нет, их вводит gets (str);
fflush (stdin) чистит буфер клавиатуры, например, если вы до gets использовали scanf, то в буфере остался код \n и соответственно gets запишет неверный результат (scanf его удаляет сам при своем вызове, но оставляет его по завершению, поэтому перед gets лучше чистить буфер)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 21:27     Строки с типом char * в С++
Еще ссылки по теме:

Преобразовать массив с типом char в массив с типом int C++
C++ Работа с типом char
Структурка (удалить данные с типом char) C++

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

Или воспользуйтесь поиском по форуму:
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 21:27  [ТС]     Строки с типом char * в С++ #13
еще раз спасибо)

Добавлено через 3 минуты
а еще один момент, мне сказано "Если решить задачу невозможно, программа должна выдать соответствующее сообщение.", могут ли в этой программе возникнуть такие ситуации?

Добавлено через 52 минуты
например если в строке вообще не окажется слова с 0
Yandex
Объявления
21.11.2011, 21:27     Строки с типом char * в С++
Ответ Создать тему
Опции темы

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