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

Скромный вопрос

20.05.2011, 22:42. Показов 1582. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста, как можно в строке содержащей буквы и цифры определить количество цифр?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.05.2011, 22:42
Ответы с готовыми решениями:

Скромный вопрос про выбор визуальной среды программирования
Привет, возник такой вопрос, может глупо задавать его в форуме посвященном С++, но тем не менее. Я...

Скромный апгрейд компьютера
Доброго времени суток, форумчане! у меня железо: intel Core 2 Duo E7500, 2933 MHz Radeon HD 4600...

Здрасти всем. Есть не скромный вопросик
может ли access и как это сделать если может, создать определенный текстовой информацией и...

Скромный комп для онлайн геймера
Добрый вечер! Прошу, оцените параметры: Коробка: Miditower ZALMAN <Z9 Plus> Black ATX без БП...

21
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
20.05.2011, 22:48 2
Посчитать?
0
21 / 21 / 3
Регистрация: 12.07.2010
Сообщений: 27
20.05.2011, 22:48 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <string>
 
using namespace std;
 
int main()
{
    string s = "dasdlashda783dhnsaiufts7gsdbvsdt89sdfhds8";
    int i = 0;
    int result = 0;
 
    while(s[i]!= '\0')
    {
        if(s[i] > '0' && s[i] < '9') result++;
        i++;
    }
 
    cout << result;
 
}
0
Freelance
Эксперт С++
2891 / 1826 / 356
Регистрация: 09.09.2010
Сообщений: 3,841
20.05.2011, 22:50 4
C
1
2
3
4
5
char str[] = "asd67f76s", *p = str;
size_t cnt = 0;
for(; *p; ++p)
  if(isdigit(*p))
    ++cnt;
C++
1
2
std::string str("fsd676sdf76");
size_t cnt = std::count_if(str.begin(), str.end(), isdigit);
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
20.05.2011, 22:53  [ТС] 5
Спасибо, алгоритм в целом понятен, благодарю за помощь, осталось сделать это в рекурсивном варианте
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,591
20.05.2011, 22:57 6
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(int argc, char *argv[]) {
  char string[] = "this is 1st string with 4 digits. Only 2 more. 1 left.";
  char *symbol;
  size_t digits = 0;
  for (symbol = string; *symbol != '\0'; ++symbol)
    if (*symbol >= '0' && *symbol <= '9')
      ++digits;
  printf("String:\n%s\nDigits: %d\n", string, digits);
  
  return 0;
}
Добавлено через 4 минуты
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
осталось сделать это в рекурсивном варианте
А вот СРАЗУ, в первом посту, сказать, что хочется рекурсию сложно было? Рекурсивный алгоритм для данной задачи будет не очень хорошей идеей.

C
1
2
3
4
5
6
7
8
9
10
11
size_t CountDigits(char *string) {
  if (*string == '\0') return 0;
  return ((*string >= '0' && *string <= '9') ? 1 : 0) + CountDigits(string + 1);
}
 
int main(int argc, char *argv[]) {
  char string[] = "this is 1st string with 4 digits. Only 2 more. 1 left.";
  printf("%d\n", CountDigits(string));
 
  return 0;
}
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
20.05.2011, 22:59  [ТС] 7
Насколько я понимаю рекурсия это когда нет цикла и функция ссылается сама на себя,а тут чтото не то

Добавлено через 1 минуту
Цитата Сообщение от lemegeton Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
 
int main(int argc, char *argv[]) {
  char string[] = "this is 1st string with 4 digits. Only 2 more. 1 left.";
  char *symbol;
  size_t digits = 0;
  for (symbol = string; *symbol != '\0'; ++symbol)
    if (*symbol >= '0' && *symbol <= '9')
      ++digits;
  printf("String:\n%s\nDigits: %d\n", string, digits);
  
  return 0;
}
Добавлено через 4 минуты

А вот СРАЗУ, в первом посту, сказать, что хочется рекурсию сложно было? Рекурсивный алгоритм для данной задачи будет не очень хорошей идеей.

C
1
2
3
4
5
6
7
8
9
10
11
size_t CountDigits(char *string) {
  if (*string == '\0') return 0;
  return ((*string >= '0' && *string <= '9') ? 1 : 0) + CountDigits(string + 1);
}
 
int main(int argc, char *argv[]) {
  char string[] = "this is 1st string with 4 digits. Only 2 more. 1 left.";
  printf("%d\n", CountDigits(string));
 
  return 0;
}
ну условия задачи не я выбираю к сожалению)
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,591
20.05.2011, 23:00 8
Внимательней.
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.05.2011, 23:00 9
Gothic Angelos, Ну вообще-то вполне нормальная рекурсия. Как следует код посмотрите
0
Эксперт С++
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
20.05.2011, 23:01 10
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
Насколько я понимаю рекурсия это когда нет цикла и функция ссылается сама на себя,а тут что-то не то

ну условия задачи не я выбираю к сожалению)
Как раз в последнем варианте - все то, что надо.
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,591
20.05.2011, 23:01 11
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
ну условия задачи не я выбираю к сожалению)
... и к моменту написания поста условия задачи еще не до конца известны?
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
20.05.2011, 23:02  [ТС] 12
size_t CountDigits(char *string) {
if (*string == '\0') return 0;
return ((*string >= '0' && *string <= '9') ? 1 : 0) + CountDigits(string + 1);
}

пока пытаюсь вникнуть в эту часть кода
? 1 : 0) + CountDigits(string + 1); эта часть мне пока не ясна
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.05.2011, 23:08 13
Gothic Angelos, Ну учебник в руки че могу сказать.

тернарный оператор если условие истино - будет 1 если ложно 0, затем вызываем рекурсивно функцию для следующего символа (складывая с 1 или 0 возвращаемое значение).

Чтобы познать рекурсию нужно познать рекурсию ©
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
20.05.2011, 23:10  [ТС] 14
Просто нас ещё не успели обучить таким хитрым приёмам...
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
20.05.2011, 23:11 15
Gothic Angelos, Главное в программировании самообучение. Попробуйте.
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
20.05.2011, 23:43  [ТС] 16
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include<iostream.h>
#include<fstream.h>
#include<string.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void ToFile();
void FromFile ();
int C4ET(char a[81],int p);
void main ()
 
{
clrscr();
char a[81];
int p;
ToFile();
 
FromFile();
C4ET(a,p);
getch();
}
void ToFile()
{
char a[81];
ofstream OUT;
OUT.open("D:/text.cpp");
if (OUT.fail())
{
cout<<"file ne otkrilca!\n";
exit(1);
}
cout<<"vvecti text:\n";
do
{
gets(a);
OUT<<a<<endl;
}
while (getch()!='0');
OUT.close();
}
void FromFile ()
{
char a[81];
ifstream Input;
Input.open("D:/text.cpp");
if (Input.fail())
{
cout<<"file ne otkrilca!\n";
exit(1);
}
 Input.close();
 }
int C4ET(char a[81],int p)
{
p=0;
 
if ( a[81]!= '0' && a[81]!='9')
return 0;
else
p++;
return (C4ET (a,p));
 
 
}
вот мой код, моё задание: "Написать рекурсивную функцию подсчёта количества цифр в текстовом файле"
в последней функции с названием C4ET пытался чтото делать, скажите как лучше поправить?
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,591
20.05.2011, 23:53 17
Это уже третий вариант задания.

Добавлено через 37 секунд
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
скажите как лучше поправить?
Лучше не решать данную задачу при помощи рекурсии. Стек быстро кончится.
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
20.05.2011, 23:54  [ТС] 18
Ну задание у меня такое, так что пусть алгоритм не рационален, но нужно сделать именно так
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,591
20.05.2011, 23:57 19
Да ты уже третий раз меняешь задание.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
#include <stdlib.h>
 
size_t CountDigits(FILE *file) {
  if (feof(file))
    return 0;
  char symbol = fgetc(file);
  return ((symbol >= '0' && symbol <= '9') ? 1 : 0) + CountDigits(file);
}
 
int main(int argc, char *argv[]) {
  FILE *file = fopen("tutor169.c", "r"); // <- тут имя файла поменяй
  printf("%d\n", CountDigits(file));
  fclose(file);
  return 0;
}
0
1 / 1 / 1
Регистрация: 29.05.2010
Сообщений: 153
21.05.2011, 00:33  [ТС] 20
Ну сначала я хотел просто разобраться с алгоритмом, потом заморочился на рекурсии

Добавлено через 8 минут
Я выше написал код, в котором последняя функция должна считать количество цифр среди букв, которые мы задали с клавиатуры и поместили в файл....я прошу отредактировать последнюю функцию, чтобы она выполняла поставленную задачу
0
21.05.2011, 00:33
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2011, 00:33
Помогаю со студенческими работами здесь

Хочу продать скромный ПК,если возможно оцените
Видеокарта MSI PCI-Ex GeForce GTX 750 Ti TF 2048MB GDDR5 (128bit)-гарантия до2019г. Intel(R)...

Вопрос по SetParent (поэтому, наверное, это вопрос к NickStaves)
Есть набор форм, назовём их 'интерфейсными'. Есть отдельная форма, назовём её 'хранилищем'. Сама...

[ВОПРОС]: Меню и вопрос при регистрации
Помогите пожалуйста. У меня vbulletin 4.0.7 и после установки в верхнем меню есть лишняя навигация....

Вопрос о картинках, вопрос о формулах
Всем доброго времени суток! Как обычно глупые вопросы... Вопрос первый, с сайта копируется...


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

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