С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/6: Рейтинг темы: голосов - 6, средняя оценка - 4.67
15 / 8 / 8
Регистрация: 28.10.2019
Сообщений: 45
1

Различия в коде

03.01.2020, 15:41. Показов 1156. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Напишите программу, которая использует массив char и цикл для чтения по
одному слову за раз до тех пор, пока не будет введено слово done. Затем
программа должна сообщить количество введённых слов (исключая done).
Пример запуска должен быть таким:
Вводите слова (для завершения введите слово done):
anteater birthday category dumpsteг
envy finagle geometry done for sure
Вы ввели 7 слов .
Вы должны включить заголовочный файл cstring и применять функцию
strcmp() для выполнения проверки.


Собственно, само решение задачи я нашёл на форуме, и, в принципе, шёл правильным путём, но до конца так и не дошёл, т.к. не понимаю следующие некоторые вещи.
Вот решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>  // для функции сравнения строк strcmp()
#include <windows.h>
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
 
    const int size = 20;
    char answer[size];
    int qty = 0;
    std::cout << "Вводите слова (для завершения введите слово done):\n";
    std::cin >> answer;
    while (strcmp(answer, "done"))
    {
        std::cin >> answer;
        ++qty;
    }
 
    std::cout << "Вы ввели " << qty << " слов." << std::endl;
    std::cin.get();
    return 0;
}
Ниже код, который будет подсчитывать количество символов во вводе.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
int main()
{
    using namespace std;
    char ch;
    int count = 0;
    cout << "Enter characters; enter # to quit:\n";
    cin.get(ch);
    while (ch != '#')
    {
        cout << ch;
        ++count;
        cin.get(ch);
    }
    cout << endl << count << " characters read\n";
    return 0;
}
Мне не понятно, за счет чего в первом коде программа считает все, что записано через пробел, а во втором только символы?
Как я понял, это связано с тем, что в первом коде объявляется количество символов (поскольку при попытке использовать без константной переменной size, ругается),
C++
1
2
    const int size = 20;
    char answer[size];
но как это влияет?
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2020, 15:41
Ответы с готовыми решениями:

Сравнить две строки на различия не учитывая кол-во пробелов и такие различия в буквах как о-и, н-т, в-д.
Здравствуйте. Помогите пожалуйста дополнить программу. Суть программы - нужно сравнить две строки...

различия с и с++
заметил что во всех книгах по с++ вначале идет страниц 100 синтаксис С а потом С++с ооп Сильно ли...

различия С++ от С#
Сейчас я учусь на первом курсе института, проходим С++. Преподаватель сказал нам что со второго...

Различия
Подскажите, существуют ли различия между проектами в интернете, так сказать онлайн-проектами, и...

6
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
03.01.2020, 15:49 2
Цитата Сообщение от Asturiasly Посмотреть сообщение
а во втором только символы?
Во втором мы считаем количество символов, что не соответствует ТЗ

Добавлено через 39 секунд
И когда количество элементов неизвестно лучше использовать динамическую память
1
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
03.01.2020, 15:52 3
Лучший ответ Сообщение было отмечено Asturiasly как решение

Решение

Цитата Сообщение от Asturiasly Посмотреть сообщение
Мне не понятно, за счет чего в первом коде программа считает все, что записано через пробел, а во втором только символы?
В первом случае считываются символы в массив до первого разделителя или пока не считается size - 1 символов. Подробное описание тут (см. под цифрой 2)
https://en.cppreference.com/w/... ator_gtgt2
1
653 / 466 / 183
Регистрация: 23.04.2019
Сообщений: 1,987
03.01.2020, 15:52 4
Цитата Сообщение от Asturiasly Посмотреть сообщение
const int size = 20;
    char answer[size];
Мы говорим компилятору, выделить нам 20 элементов массива, если мы будем просить не константой, то компилятор не будет знать сколько памяти выделить и выдаст ошибку

В данном случае длина слова не должна превышать 19 (\0 в конце)
1
15 / 8 / 8
Регистрация: 28.10.2019
Сообщений: 45
03.01.2020, 16:03  [ТС] 5
То есть, если мы используем char как массив символов, то он автоматически ставит разделителем пробел? Можно ли в таком случае как-то поменять разделитель и, например, тем же образом считать предложения? Если увеличить массив, например, до 120.
0
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
03.01.2020, 16:32 6
Цитата Сообщение от Asturiasly Посмотреть сообщение
То есть, если мы используем char как массив символов, то он автоматически ставит разделителем пробел?
Не только, все символы категории white space
Цитата Сообщение от Asturiasly Посмотреть сообщение
Можно ли в таком случае как-то поменять разделитель и, например, тем же образом считать предложения?
Можно, но это уже редактирование локали, что для новичка не особо понятно.
1
Неэпический
18109 / 10696 / 2062
Регистрация: 27.09.2012
Сообщений: 26,939
Записей в блоге: 1
03.01.2020, 20:40 7
Цитата Сообщение от Asturiasly Посмотреть сообщение
Можно ли в таком случае как-то поменять разделитель и, например, тем же образом считать предложения?
Как установить разделитель полей входного потока
1
03.01.2020, 20:40
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2020, 20:40
Помогаю со студенческими работами здесь

Различия С++ от С#
Можно ли понять все различия С++ от С# ориентируясь на эту ссылку...

Различия типов
Какая разница между типом значения и ссылочным типом? Читая книгу, не особо понятно. Полагаю, что...

Различия в командах
Сильно ли разнятся наборы команд у разных дистрибутивов линухи. Почему такой вопрос? ... стоит ли...

Различия между 81 80
сильно ли различаеться платформа в 80 и 81 с точки зрения конфигурирования. Изучив платформу по...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru