Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.55/22: Рейтинг темы: голосов - 22, средняя оценка - 4.55
Алексей_123
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 51
1

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

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

Помогите написать программу по строкам c++
При написании программ использовать нуль–терминированные строки и работать только с типом char *. Длина каждой строки не превосходит 300 символов.
Строка состоит из слов, разделенных одним или несколькими пробелами. Среди слов, состоящих только из цифр, найти слово, содержащее максимальное число нулей. Если таких слов больше одного, найти предпоследнее из них.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2011, 17:29
Ответы с готовыми решениями:

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

Работа с типом Char
Здравствуйте. У меня есть три переменные типа Char, размерность каждой...

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

Ошибка с типом char
При запуске выдает ошибки связанные с char. На другой версии visual все...

Действия над типом Char
Как узнать сколько содержит сиволов, пустая ли она, содержит ли одни буквы...

12
Петррр
6163 / 3464 / 897
Регистрация: 28.10.2010
Сообщений: 5,928
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
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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
Эксперт С++
3637 / 1369 / 243
Регистрация: 16.04.2009
Сообщений: 4,527
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
21.11.2011, 21:27
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.11.2011, 21:27

Как перегрузить поле с типом Char
нужна перегрузка сложения в классе int o; char *gr; вот если...

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

Запрет на перегрузку функций с типом char
В задаче нужно создать два конструктора позволяющих создать строку разной...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

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