Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > C++ > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 24.11.2016, 22:35   #1
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию Подсчёт слов в строке

Мне дали задание: Если в строку длиной до 70 символов, входит четное количество слов, состоящих из четырех букв, то вывести сообщение TRUE.
И вот что я сделал:
Код:
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(){
    char str[71],input[5];
    int count=0;
    scanf("%s",input);
    while(strlen(str)<70){
        strcat(str,input);
        if(strlen(str)==70){
            if(count%2==0){
                printf("TRUE\n");
            }else{
                printf("FALSE\n");
                printf("%s\n",str);
            }
            break;
        }
        count++;
    }
}
Я посчитал количество символов которые он выводит- 64, не знаю где ошибка, и есть у меня подозрения что она тут не одна, если найдёте ошибку, подскажите как исправить пожалуйста.
CortesGames вне форума Ответить с цитированием
Старый 25.11.2016, 08:09   #2
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,540
По умолчанию

Тут вообще какая-то наркомания непонятная. Почему вводите максимум 4 символа, когда нужно до 70? Зачем строки объединять? Зачем проверка длины на 70?
Запрашиваете строку str, а не input, потом при помощи strtok пилите на слова
https://ru.wikipedia.org/wiki/Strtok
там пример даже подходящий, слово лексемы только меняете на слова и вот уже есть выделение слов. Внутри цикла проверяете длину слова и считаете количество слов. Попалось слово не из 4 букв - пишем FALSE и выходим из цикла. После цикла проверяем подсчитанное число слов и если там не чётное число - пишем FALSE, чётное - TRUE.
pu4koff вне форума Ответить с цитированием
Старый 25.11.2016, 11:49   #3
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Ясно, я не так понял задание.
CortesGames вне форума Ответить с цитированием
Старый 25.11.2016, 23:52   #4
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Я переделал программу, но теперь она выводит TRUE в любом случае, даже если ввожу одно слово из 3 букв. Подскажите где ошибка?
Код:
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(){
    char line[71];
    int letter=1,word=0;
    scanf("%s",*&line);
    for(int i=0;i<strlen(line);i++){
        if(isspace(line[i])){
            if(letter==4){
                word++;
            }else{
                letter=0;
            }
        }else{
            letter++;
        }
    }
    if(word%2==0){
        printf("TRUE\n");
    }else{
        printf("FALSE\n");
    }
}

Последний раз редактировалось CortesGames; 26.11.2016 в 00:19.
CortesGames вне форума Ответить с цитированием
Старый 26.11.2016, 05:13   #5
CortesGames
Пользователь
 
Аватар для CortesGames
 
Регистрация: 23.10.2016
Сообщений: 86
По умолчанию

Уже сам решил. Если кому-то интересно вот код. Я нашёл проблему- scanf не считывал пробел, решение этой проблемы я не нашёл, поэтому решил вместо пробела писать _ и всё заработало. Потом нашёлся ещё один баг, если ввести в программу просто слово из четырёх букв, оно выведет FALSE потому что я пока-что не знаю как сделать проверку на конец строки.
Код:
#include <stdio.h>
#include <curses.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

int main(){
    char line[71];
    int letter=0,word=1;
    scanf("%s",*&line);
    for(int i=0;i<strlen(line);i++){
        if(line[i]=='_'){
            if(letter==4){
                word++;
            }else{
                letter=0;
            }
        }else{
            letter++;
        }
    }
    if(word%2==0){
        printf("TRUE\n");
    }else{
        printf("FALSE\n");
    }
}
Насылаю баги по фотографии

преимущественно себе

Последний раз редактировалось CortesGames; 26.11.2016 в 05:16.
CortesGames вне форума Ответить с цитированием
Старый 29.11.2016, 23:33   #6
olej.tsil
Заблокирован
 
Регистрация: 29.11.2016
Сообщений: 215
По умолчанию

Цитата:
Сообщение от CortesGames Посмотреть сообщение
Уже сам решил.
Вы русский текст вводите - оптимизму поубавится, и будете приятно удивлены.
olej.tsil вне форума Ответить с цитированием
Старый 30.11.2016, 09:19   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 2,870
По умолчанию

Цитата:
Сообщение от CortesGames Посмотреть сообщение
пока-что не знаю как сделать проверку на конец строки
вариант 1: добавить к строке "_"
вариант 2: насколько я помню, в С строки заканчиваются /0. Проверять не только встречу "_" но и символа конца строки.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчёт повторяющихся слов в строке Таксист C# (си шарп) 3 18.07.2015 20:48
подсчёт слов neBu4kaMaXiM Помощь студентам 2 30.03.2010 09:00
подсчёт слов Светочка132 Помощь студентам 1 27.03.2010 15:59
подсчёт слов neBu4kaMaXiM Фриланс 13 18.03.2010 18:11
по вводу слов в массив и подсчёт введённых слов -ushёl- Общие вопросы C/C++ 4 16.11.2009 00:45


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS