Форум программистов, компьютерный форум CyberForum.ru

Динамические массивы, файлы, строки - C++

Восстановить пароль Регистрация
 
diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
20.02.2012, 00:03     Динамические массивы, файлы, строки #1
В первой строке файла указано количество строк.
Выделить память под массив указателей на строки, ввести текст построчно, динамически выделяя память для хранения каждой строки и записывая указатель в массив. Вывести на экран исходный текст
(все это я написал)

остался главный вопрос:
Нужно определить каких символов в файле больше: цифр или латинских букв?

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
#include "stdafx.h"
#include <string>
#include <fstream>
#include <iostream>
#include <conio.h>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    int n;  
    ifstream infile("text.txt");
    infile>>n;
 
        string *a = new string [n];
 
    for (int i=0; i<n; i++)
    {
        infile>>a[i];
    }
 
    for (int i=0; i<n; i++)
    {
        cout<<a[i];
        cout<<endl; 
    }
 
    getch();
    return 0;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
IFree Host
Заблокирован
20.02.2012, 00:10     Динамические массивы, файлы, строки #2
читай посимвольно строки и если попадается буква инкриментируй счетчик букв а если цифра инкриментируй счетчик цифр.
diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
20.02.2012, 22:29  [ТС]     Динамические массивы, файлы, строки #3
а как это написать в программе, если i-ая строка выглядит как элемент массива a[i]?
IFree Host
Заблокирован
20.02.2012, 22:30     Динамические массивы, файлы, строки #4
Извени не совсем понял вопрос
Можешь конкретнее сформулировать
diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
20.02.2012, 22:34  [ТС]     Динамические массивы, файлы, строки #5
в элемент динамического массива a[i] записывается указатель на строку...
т.е. грубо говоря есть массив строк (где a[i] по сути строка)
вот как читать эти строки посимвольно?


C++
1
2
3
4
for (int i=0; i<n; i++)
        {
                infile>>a[i];
        }
IFree Host
Заблокирован
20.02.2012, 23:10     Динамические массивы, файлы, строки #6
ОК,
a[i] хранит указатель на строку
значит разименовав a[i] получим массив содержащий знаки
так как string это массив значит нужно определить длину строки
это делается с функцией strlen

Не по теме:

Функция int strlen (const char* s); - определяет длину строки s. Возвращает количество символов, предшествующих завершающему нулевому символу. Обратите внимание, завершающий ноль-символ в длину не включается. Например,
cout << strlen("Hello!"); // на экране будет 6

char *str = "one";
cout << strlen(str); // на экране будет 3

diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
20.02.2012, 23:20  [ТС]     Динамические массивы, файлы, строки #7
становится понятнее) спасибо
а как разыменовать такой массив?
IFree Host
Заблокирован
20.02.2012, 23:33     Динамические массивы, файлы, строки #8
разименовывают так

C
1
*a[i]
а дальше можно попробовать так обратиться к стрингу

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
char output;
 
int count_letters = 0;
int count_numbers = 0;
 
for (int i=0; i<n; i++)
{
      for ( int pos = 0; pos < *a[i].length(); ++pos )
      {
        output = *a[i].at(pos);
      }
   // а дальше надо проверять на сходство с буквой или числом.
 
if ((output >= 65 && output<= 90) || (output >= 97 && output<= 122)) // значит буква
       ++count_letters;
if (output >= 48 && output<= 57) // значит число
       ++count_numbers;
}
// а дальше сам проверишь чего больше
При этом учти, я совершенно не уверен, что это сработает. Сам с такими задачами еще не разу не сталкивался. У нас еще такого не было. Я сам только первый семестр закончил.
diaryofsummer
1 / 1 / 0
Регистрация: 19.02.2012
Сообщений: 31
20.02.2012, 23:37  [ТС]     Динамические массивы, файлы, строки #9
о! здорово здорово!:)
большое спасибо:)
HardMorg
2 / 25 / 3
Регистрация: 29.08.2010
Сообщений: 204
20.02.2012, 23:45     Динамические массивы, файлы, строки #10
C
1
2
if (output >= 48 && output<= 57) // значит число
       ++count_numbers;
if(isdigit(output))
++count_numbers;

if (isalpha(output))
++count_letters;
так красивей будет)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2012, 23:45     Динамические массивы, файлы, строки
Еще ссылки по теме:

C++ ДИНАМИЧЕСКИЕ МАССИВЫ.Найти номер строки, в которой сумма отрицательных нечетных элементов самая большая
C++ Основы C++. Массивы, строки, файлы
Взять статические строки заменить на динамические массивы и распечатать C++

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

Или воспользуйтесь поиском по форуму:
IFree Host
Заблокирован
20.02.2012, 23:45     Динамические массивы, файлы, строки #11
Да ты рано благодаришь. Сначала смотри чтобы все заработало.

Не по теме:

И вот тебе +1 к репутации. Чтобы стимула добавить

Yandex
Объявления
20.02.2012, 23:45     Динамические массивы, файлы, строки
Ответ Создать тему
Опции темы

Текущее время: 07:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru