Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

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

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

Вопрос по массивав, "институтский" вопрос. - C++
Готовлюсь к летней сессии по программированию. С++ Есть такая вот задачка (привожу как есть) В документации подобного не...

вопрос - C++
Есть код программы , в конце программы должен запрашеватся вопрос , продолжить выполнения программы да/нет если "да" то программа...

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

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

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

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

21
Напильнег
480 / 118 / 10
Регистрация: 30.09.2010
Сообщений: 473
20.05.2011, 22:48 #2
Посчитать?
0
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;
 
}
0
asics
Freelance
Эксперт С++
2848 / 1783 / 144
Регистрация: 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
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 143
20.05.2011, 22:53  [ТС] #5
Спасибо, алгоритм в целом понятен, благодарю за помощь, осталось сделать это в рекурсивном варианте
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
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
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 143
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
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
20.05.2011, 23:00 #8
Внимательней.
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
20.05.2011, 23:00 #9
Gothic Angelos, Ну вообще-то вполне нормальная рекурсия. Как следует код посмотрите
0
ValeryLaptev
Эксперт С++
1042 / 821 / 48
Регистрация: 30.04.2011
Сообщений: 1,659
20.05.2011, 23:01 #10
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
Насколько я понимаю рекурсия это когда нет цикла и функция ссылается сама на себя,а тут что-то не то

ну условия задачи не я выбираю к сожалению)
Как раз в последнем варианте - все то, что надо.
0
lemegeton
2925 / 1354 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
20.05.2011, 23:01 #11
Цитата Сообщение от Gothic Angelos Посмотреть сообщение
ну условия задачи не я выбираю к сожалению)
... и к моменту написания поста условия задачи еще не до конца известны?
0
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 143
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
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
20.05.2011, 23:08 #13
Gothic Angelos, Ну учебник в руки че могу сказать.

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

Чтобы познать рекурсию нужно познать рекурсию ©
0
Gothic Angelos
1 / 1 / 0
Регистрация: 29.05.2010
Сообщений: 143
20.05.2011, 23:10  [ТС] #14
Просто нас ещё не успели обучить таким хитрым приёмам...
0
ForEveR
В астрале
Эксперт С++
7983 / 4742 / 321
Регистрация: 24.06.2010
Сообщений: 10,545
Завершенные тесты: 3
20.05.2011, 23:11 #15
Gothic Angelos, Главное в программировании самообучение. Попробуйте.
0
20.05.2011, 23:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2011, 23:11
Привет! Вот еще темы с ответами:

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

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