Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > С/С++
Перезагрузить страницу Ввод данных с клавиатуры как написать программу
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
fitto fitto вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2011
Exclamation Ввод данных с клавиатуры как написать программу - 05.01.2011, 20:35

Добрый вечер! ...
Не могу разобраться с одной программой. Условия следующие:
Пользователь вводит с клавиатуры строку (строка изначально не ограничена, может быть любой длины, предполагается, что идет ввод посимвольно с перевыделением памяти (P.S. я осуществил через realloc. Работает. А Как сделать то же самое, только через malloc?) Далее нужно определить сколько слов в данной строке, что была введена пользователем. Сравнить слова и вывести самое длинное слово в данной строке.

\\\ Кол-во слов в строке я подсчитал, опираясь на то, что проверяю каждый символ в строке, если это не пробел, знак табуляции, конец строки - следовательно нахожусь внутри слова, ставлю счетчик.

Не могу понять, как определить длину каждого слова и затем сравнивать их... Я где-то читал, что нужно делать массив указателей, где каждый указатель указывает на определенное слово, что так проще потом находить длины, но не знаю как это осуществить на Си.

Помогите пожалуйста... Буду очень благодарен!!!
Ответить с цитированием
  (#2 (permalink)) Старый
Olleg90 Olleg90 вне форума
Новичок
 
Аватар для Olleg90
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2011
По умолчанию 05.01.2011, 21:52

cpp Код:
#include <iostream>
#include <conio.h>
#include <string.h>

using namespace std;

void main()
{
 const int n=10, size=80;
 char text[n][size];
 char raz[]=" \n \t!.?";
 int i = 0, j,b, r, k=0, l=0,slen, m,max=0, q=0;

 cout << "Input text:";
 while (i < n && gets(text[i]) != NULL && text[i][0] != '\0')  i++;
 r = i;//кол-во введенных строк

for (i = 0; i < r; i++)
  for (j = 0; j < strlen(text[i]); j++)
  {m=j;   while (strchr(raz,text[i][j]) == NULL && j < strlen(text[i]))
   {k++;  j++;}//к- длинна слова
if(k)
    {
    q++;//слов в тесте
  if (k>l)
  l=k;//запоминаем максимальное слово
  k=0;//обнуляем длинну
  }
  }
cout << "Max length:"<<"\t"<<l<<endl;
cout << "Number of words:"<<"\t"<<q<<endl;
cout << "Max WORD(S):"<<"\t"<<endl;
 for (i = 0; i < r; i++)
  for (j = 0; j < strlen(text[i]); j++)
  {m=j;   while (strchr(raz,text[i][j]) == NULL&& j < strlen(text[i]))
   {k++; j++;}
   if (k==l)
    {for (; m<j; m++)
cout << text[i][m]; cout << "\n";}
 k=0;}
 getch();
}
Ответить с цитированием
  (#3 (permalink)) Старый
fitto fitto вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2011
Smile 05.01.2011, 22:02

Спасибо конечно) ... Но данную задачу нужно реализовать на С, а не на С++. Там свои тараканы)))
Ответить с цитированием
  (#4 (permalink)) Старый
Olleg90 Olleg90 вне форума
Новичок
 
Аватар для Olleg90
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2011
По умолчанию 05.01.2011, 22:07

а в чем разница))??
cin и cout заменить на scanf printf ?
или там нет функций gets,strchr, strlen ?)) я просто не знаю....
Ответить с цитированием
  (#5 (permalink)) Старый
fitto fitto вне форума
Новичок
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2011
По умолчанию 05.01.2011, 22:29

на printf и scanf заменить не проблема))
Функции strlen ( возращает длину строки) и strchr (возращает указатель, либо NULL) тоже используются...
Вот только насчет gets не знаю, вданном случаем с помощью этой функции мы вводим строку в text[i]?
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Olleg90 Olleg90 вне форума
Новичок
 
Аватар для Olleg90
 
Сообщений: 3
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.01.2011
По умолчанию 05.01.2011, 22:37

Цитата:
Сообщение от fitto Посмотреть сообщение
Функции strlen ( возращает длину строки) и strchr (возращает указатель, либо NULL) тоже используются...
ну можно самому эти функции написать....

Цитата:
Сообщение от fitto Посмотреть сообщение
Вот только насчет gets не знаю, вданном случаем с помощью этой функции мы вводим строку в text[i]?
да... целиком всю строку.
Ответить с цитированием
  (#7 (permalink)) Старый
Джеки Джеки вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 19.12.2010
По умолчанию 24.02.2011, 17:54

c Код:
#include <stdio.h>
#include <stdbool.h>
struct max
{
    int lenght;
    int begin;
} answer[81];
   
char text[81];

bool alphabetic (const char c)
{
    if ( (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') )
      return true;
    else    
    return false;
}

void readLine (char buffer[])
{
    char character;
    int i = 0;
    do
    {
        character = getchar();
        buffer[i] = character;
        ++i;
    }
    while ( character != '\n' );
    buffer[i-1] = '\0';
}

int countWords (const char string[])
{    
    int i, l = 0, wordCount = 0;
    bool lookingForWord = true, beginw = true, alphabetic (const char c);
    for ( i = 0; string[i] != '\0'; ++i )
      if ( alphabetic(string[i]) )
      {
          answer[l].lenght += 1;
          if ( beginw )
           {
              answer[l].begin = i;
              beginw = false;
           }              
          if ( lookingForWord )
           {
              ++wordCount;
              lookingForWord = false;
           }
      }
      else {
        lookingForWord = true;
        if (!beginw)
          ++l;        
        beginw = true;
      }
      return wordCount;
}

void sort (struct max *stArray)
{
    int array[81], i = 0, n, temp, j, u, a;
   
    while ( stArray->lenght != 0 ) {
      array[i] = stArray->lenght;
      ++i, ++stArray; }
    array[i] = '/0';

    n = i;
       
    for ( i = 0; i < n - 1; ++i )
      for ( j = i + 1; j < n; ++j )
        if ( array[i] < array[j] ) {
            temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }

    while ( stArray->lenght != array[0] )
      (--stArray)->lenght;

    printf ("\nbegin %i, lenght %i", stArray->begin, stArray->lenght );

    i = stArray->begin;
    u = stArray->lenght;    

    printf ("\nWord = ");
    for ( a = 0; a < u ; ++i, ++a )  
       printf ("%c", text[i]);
}
   

int main (void)
{  
    int totalWords = 0;
    int countWords (const char string[]);
    void readLine (char buffer[]);
    void sort (struct max *stArray);

    printf ("Type in your text.\n");
    printf ("When you are done, press 'Enter'.\n\n");

    readLine(text);
    totalWords += countWords (text);
 
    printf ("\nThere are %i words in the above text.", totalWords);

    sort (&answer);    

    return 0;
}

Всё работает.. получилось немного запутанно.. пока только так : )
Описать действия требуется или так всё понятно?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод данных с клавиатуры в Pascale Вика03051992 Вопросы начинающих программистов 1 27.12.2010 12:01
Написать программу на Лиспе, которая осуществляет ввод с клавиатуры Anzhelika Lisp 12 12.08.2010 15:00
Ввод данных с клавиатуры в массив элементов типа Zodiac *Солнце* Вопросы начинающих программистов 4 13.05.2010 17:04
Ввод данных с клавиатуры на диалог AmDeaD Visual C++ 2 04.10.2009 16:02
Ввод с клавиатуры и поиск Rifler Assembler 0 12.04.2009 15:23
Ввод массива с клавиатуры chi-za Вопросы начинающих программистов 8 21.07.2008 23:21
Ввод чисел с клавиатуры как реализовать imported_SAVIK Assembler 1 25.05.2008 11:45
Надо написать программу, которая позволяла пользователю ввести N чисел с клавиатуры Setter C++ Builder 12 11.05.2006 14:59
Как сделать ввод с клавиатуры данных в массив Ruiz-Garcia Вопросы начинающих программистов 13 07.11.2005 05:13
Ввод с клавиатуры artgonch Prolog 3 08.04.2005 12:53
Как написать программу на Basic которая введет с клавиатуры символьную переменную СРОЧНО! Вопросы начинающих программистов 5 25.11.2004 11:34
Как написать программу для проверки на ввод символов в C++(dos) E_L_D_I_C Вопросы начинающих программистов 6 31.10.2004 14:14



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов