Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Вывод строки, содержащей двузначное число


Автор: VampirDX 21.10.2007, 16:30
Всем привет. В общем, задали написать прогу, вот текст
"Написать прогу, которая считывает текст из файла и выводит на экран только строки, содержащие двузначные числа."
  при том, сказали, использовать функцию isdigit. помогите, кто может.

Автор: Optimus 21.10.2007, 17:52
Код

#include <conio.h>
#include <fstream.h>
#include <ctype.h>


void main()
{
  clrscr();

  char str[300];

  ifstream in;
  in.open("myFile.txt");

  if (!in)
  {
    cout << "Cannot open file";
    getch();
    return;
  }


  while(!in.eof())
  {
    in.getline(str, sizeof(str));

    for (int i = 0; str[i] != '\0'; ++i)
    if ( isdigit(str[i]))
    {
      for (int j = i + 1; str[j] != '\0' && isdigit(str[j]); ++j);

      if (j - i == 2 )
      {
        cout << str << endl;
      }

      i = j;
    }
  }

  in.close();


  getch();
}


напишите примеры строк которые надо выводить, и которые не надо

Автор: VampirDX 21.10.2007, 18:19
выдает 2 ошибки:
 clrscr - идентификатор не найден( и я вообще хз что такое clrscr)
 j - необъявленная переменная

Автор: Optimus 21.10.2007, 18:35
Цитата(VampirDX @  21.10.2007,  18:19 Найти цитируемый пост)
clrscr - идентификатор не найден( и я вообще хз что такое clrscr)

clrscr() - очищает экран, можно не писать

Цитата(VampirDX @  21.10.2007,  18:19 Найти цитируемый пост)
 j - необъявленная переменная 

тогда объявить там где
Код

char str[300];


Автор: VampirDX 21.10.2007, 19:42
ЗАВЕЛАСЬ smile  smile 
спасибо огромное!!!

Добавлено через 1 минуту и 26 секунд
optimus слух, можешь объяснить вот эту часть в кратце, а то мои мозги уже не фильтруют?
 
 
Код

for (int i = 0; str[i] != '\0'; ++i)
    if ( isdigit(str[i]))
    {
      for (int j = i + 1; str[j] != '\0' && isdigit(str[j]); ++j);

      if (j - i == 2 )
      {
        cout << str << endl;
      }

      i = j;
    }

Автор: Optimus 21.10.2007, 20:41
Цитата(VampirDX @  21.10.2007,  19:42 Найти цитируемый пост)
if ( isdigit(str[i]))

проверяем если символ в строке это цифра

Цитата(VampirDX @  21.10.2007,  19:42 Найти цитируемый пост)
for (int j = i + 1; str[j] != '\0' && isdigit(str[j]); ++j);

определяем где заканчивается подстрока цифр

Цитата(VampirDX @  21.10.2007,  19:42 Найти цитируемый пост)
if (j - i == 2 )

проверяем если количества цифр ровна двум

Автор: VampirDX 21.10.2007, 22:13
благодарствую

Автор: wolmor 24.10.2007, 11:45
помогите плиз эту прогу на C# написать, чтобы массив вводился с клавиатуры, а не из файла  smile

Автор: Optimus 24.10.2007, 13:35
Код

static void Main(string[] args)
{
  string[] myStrings = new string[3];

  for (int i = 0; i < myStrings.Length; ++i)
  {
    Console.WriteLine("Введите {0} строку", i + 1);
    myStrings[i] = Console.ReadLine();
  }

  Console.WriteLine("\n");

  for (int i = 0; i < myStrings.Length; ++i)
  {
    for (int j = 0; j < myStrings[i].Length; ++j)
    {
      if (Char.IsDigit(myStrings[i][j]))
      {
        int k;
        for (k = j + 1; k < myStrings[i].Length && Char.IsDigit(myStrings[i][k]); ++k);

        if (k - j == 2)
        {
          Console.WriteLine(myStrings[i]);
        }

        j = k;
      }
    }
  }

  Console.ReadLine();
}


Автор: wolmor 24.10.2007, 17:24
Optimus, большое спасибо

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)