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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 29, средняя оценка - 4.76
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
#1

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

19.11.2011, 17:29. Просмотров 3702. Ответов 12
Метки нет (Все метки)

Помогите написать программу по строкам c++
При написании программ использовать нуль–терминированные строки и работать только с типом char *. Длина каждой строки не превосходит 300 символов.
Строка состоит из слов, разделенных одним или несколькими пробелами. Среди слов, состоящих только из цифр, найти слово, содержащее максимальное число нулей. Если таких слов больше одного, найти предпоследнее из них.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 17:29
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Строки с типом char * в С++ (C++):

Преобразовать массив с типом char в массив с типом int - C++
Что-то не получается у меня найти инфу именно с преобразованием массивов с char в int. Нахожу только преобразование с числами. ...

Работа с типом char - C++
Пожалуйста, помогите понять разницу между этими записями: char a; char *a; char *a; char a;

Ошибка с типом char - C++
При запуске выдает ошибки связанные с char. На другой версии visual все работало сразу. Не понимаю как исправить их. Ошибки выделены в...

Действия над типом Char - C++
Как узнать сколько содержит сиволов, пустая ли она, содержит ли одни буквы переменная N: ///Подключение библиотек ... char N; ...

Как перегрузить поле с типом Char - C++
нужна перегрузка сложения в классе int o; char *gr; вот если интовское поле было то пишу Text Text::operator+(Text...

вывод слова на экран с типом char. - C++
Помогите пожалуйста не могу решить программу... Дано слово. Вывести это слово на экран с 4 знаками <<+>> в начале слова и с 5 знаками <<*>>...

12
Петррр
5962 / 3399 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
19.11.2011, 21:37 #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;
}
1
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 19:46  [ТС] #3
спасибо большое, а можно еще сделать ввод строки вручную в этой проге?

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

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

Добавлено через 46 секунд
И библиотеку подключи
C
1
#include <stdlib.h>
0
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 20:02  [ТС] #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
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 20:05 #8
замените
C
1
2
3
4
char *str;
                str=(char*)malloc(1000);
fflush (stdin);
gets (str);
0
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 20:09  [ТС] #9
заменить вот этот участок?
C++
1
2
3
 char *str;
                str=(char*)malloc(1000);
                scanf ("%str",str);
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 20:12 #10
Алексей_123, да, просто scanf вводит до пробела
0
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 20:17  [ТС] #11
go, большое спасибо, а fflush (stdin); позволяет вводить слова с любым количеством пробелов?
0
go
Эксперт С++
3586 / 1366 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
21.11.2011, 20:26 #12
Алексей_123, нет, их вводит gets (str);
fflush (stdin) чистит буфер клавиатуры, например, если вы до gets использовали scanf, то в буфере остался код \n и соответственно gets запишет неверный результат (scanf его удаляет сам при своем вызове, но оставляет его по завершению, поэтому перед gets лучше чистить буфер)
1
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
21.11.2011, 21:27  [ТС] #13
еще раз спасибо)

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

Добавлено через 52 минуты
например если в строке вообще не окажется слова с 0
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 21:27
Привет! Вот еще темы с ответами:

Структурка (удалить данные с типом char) - C++
Привет всемм!!! Нужно было мне написать структурку для стадиона а также удалить &quot;Удалить элемент с заданным названием.&quot; Название имеет...

Функции для работы с типом char* - C++
Здравствуйте! Подскажите ресурс, где описана реализация основных функции для работы с указателями на строки

Что делать с типом unsined char? - C++
Задача: Создать класс Money для работы с денежными суммами. Число должно быть представлено двумя полями: типа long для рублей и типа...

Не работает шаблонная функция с типом char - C++
Как реализовать шаблон функции для калькулятора для дробей с типом &lt;char&gt;?А то вместо чисел выводатся символы в дробях. С другими типами...


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

Или воспользуйтесь поиском по форуму:
13
Yandex
Объявления
21.11.2011, 21:27
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru