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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
#1

Скромный вопрос - C++

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

Подскажите пожалуйста, как можно в строке содержащей буквы и цифры определить количество цифр?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2011, 22:42     Скромный вопрос
Посмотрите здесь:

вопрос - C++
здрасте всем ,хочу научиться программировать ,подскажите где взять среду с\с++ и с чего вообще начать обучение ,я чайник полный :)

Вопрос по #if - C++
const LEVEL = 4; #if LEVEL == 5 cout <<5<<endl; #elif LEVEL == 4 cout <<4<<endl; #else cout...

Вопрос по C++ - C++
Сколько байт памяти займут займут три структурных переменные типа time, если структура вмещает 3 поля типа int

Вопрос - C++
стоит ли учить язык програмирования С++? говорят язык отличный. И чем он хуже Делфи,Паскаля,Асемблер,ЛУА(ЛОА непомню правильности) , ПХП,...

Вопрос - C++
Никто не знает как можно вот эту программу переделать в язык паскаль #include <stdio.h> #include <conio.h> #include <malloc.h> void...

Вопрос по if, else? - C++
Как сделать так чтобы программа работала по таком принципу: 1. Проверяется первое условие если оно верно - выводится оператор за ним. ...

Вопрос - C++
а зачем все эти задачки? и где то читал что программисту нужно знать матрицы-а зачем?

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Напильнег
480 / 120 / 10
Регистрация: 30.09.2010
Сообщений: 473
20.05.2011, 22:48     Скромный вопрос #2
Посчитать?
SS_47
21 / 21 / 1
Регистрация: 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;
 
}
asics
Freelance
Эксперт C++
2846 / 1783 / 144
Регистрация: 09.09.2010
Сообщений: 3,842
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);
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
20.05.2011, 22:53  [ТС]     Скромный вопрос #5
Спасибо, алгоритм в целом понятен, благодарю за помощь, осталось сделать это в рекурсивном варианте
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
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;
}
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
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;
}
ну условия задачи не я выбираю к сожалению)
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
20.05.2011, 23:00     Скромный вопрос #8
Внимательней.
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
20.05.2011, 23:00     Скромный вопрос #9
Gothic Angelos, Ну вообще-то вполне нормальная рекурсия. Как следует код посмотрите
ValeryLaptev
Эксперт С++
1035 / 814 / 48
Регистрация: 30.04.2011
Сообщений: 1,658
20.05.2011, 23:01     Скромный вопрос #10
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
Насколько я понимаю рекурсия это когда нет цикла и функция ссылается сама на себя,а тут что-то не то

ну условия задачи не я выбираю к сожалению)
Как раз в последнем варианте - все то, что надо.
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
20.05.2011, 23:01     Скромный вопрос #11
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
ну условия задачи не я выбираю к сожалению)
... и к моменту написания поста условия задачи еще не до конца известны?
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
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); эта часть мне пока не ясна
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
20.05.2011, 23:08     Скромный вопрос #13
Gothic Angelos, Ну учебник в руки че могу сказать.

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

Чтобы познать рекурсию нужно познать рекурсию ©
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
20.05.2011, 23:10  [ТС]     Скромный вопрос #14
Просто нас ещё не успели обучить таким хитрым приёмам...
ForEveR
В астрале
Эксперт С++
7968 / 4730 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
20.05.2011, 23:11     Скромный вопрос #15
Gothic Angelos, Главное в программировании самообучение. Попробуйте.
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
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 пытался чтото делать, скажите как лучше поправить?
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
20.05.2011, 23:53     Скромный вопрос #17
Это уже третий вариант задания.

Добавлено через 37 секунд
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
скажите как лучше поправить?
Лучше не решать данную задачу при помощи рекурсии. Стек быстро кончится.
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
20.05.2011, 23:54  [ТС]     Скромный вопрос #18
Ну задание у меня такое, так что пусть алгоритм не рационален, но нужно сделать именно так
lemegeton
2918 / 1347 / 134
Регистрация: 29.11.2010
Сообщений: 2,721
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;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2011, 00:33     Скромный вопрос
Еще ссылки по теме:

Вопрос - C++
Я знаю что вопрос покажится вам смешным но укажите пожалуйста ошибку я никак не могу найти а помочь некому #include&lt;iostream&gt; int...

Вопрос - C++
Приветствую Вас! 1. Необходимо просто описать как это должно работать: Дано: {max (a,b), y= {min(a,b), {|a+b|, если х=0,...

Вопрос - C++
есть командная строка cmd, в ней постоянно приходиться прописывать всякие net sh, собствено вопрос: можли написать программу которая...

вопрос.. - C++
как найти количество точек, координаты которых-целые числа, находящиеся в промежутке, который задан неравеннством...

Вопрос - C++
Такая задача возникла... Есть класс например: class tempClass { public: const int size; tempClass(){size=100;} };


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

Или воспользуйтесь поиском по форуму:
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 140
21.05.2011, 00:33  [ТС]     Скромный вопрос #20
Ну сначала я хотел просто разобраться с алгоритмом, потом заморочился на рекурсии

Добавлено через 8 минут
Я выше написал код, в котором последняя функция должна считать количество цифр среди букв, которые мы задали с клавиатуры и поместили в файл....я прошу отредактировать последнюю функцию, чтобы она выполняла поставленную задачу
Yandex
Объявления
21.05.2011, 00:33     Скромный вопрос
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru