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

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

Войти
Регистрация
Восстановить пароль
 
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
#1

Найти в символьном массиве трёхзначные числа - C++

15.06.2014, 17:32. Просмотров 585. Ответов 17
Метки нет (Все метки)

Дали задание на практике.
В нём надо прочесть из файла символьный массив и найти количество трёхзначных чисел в нём. Если количество нечётно - вывести на экран массив в обратном порядке.
И в этом нахождении трёхзначных чисел основная проблема: я даже не представляю, как это делать. Нам такое не читали, а задание дали.

Кто-нибудь, хоть подайте идею, как это сделать.

Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2014, 17:32     Найти в символьном массиве трёхзначные числа
Посмотрите здесь:

Поиск числа в символьном массиве - C++
Вводим строку символов, где есть и числа, и буквы, далее из этой строки нужно найти максимальное число. Для меня сложность в том как из...

Найти все трёхзначные числа - C++
Народ, помогите плз с этой задачей: Найти все трёхзначные числа, которые можно представить разностью между квадратом числа, образованного...

Найти все трёхзначные числа - C++
Задача: Найти всё трёхзначные натуральные числа, равные сумме кубов своих цифр. Обязательно: В коде использовать цикл.

Найти количество слов в символьном массиве - C++
дано: х (100), найти количество слов в символьном массиве. Очень прошу помогите...!!!

Найти все простые трёхзначные числа - C++
найти все простые трёхзначные числа

Найти в заданном одномерном символьном массиве нечётный палиндром наибольшей длины - C++
Дан одномерный символьный массив. Найти в нем нечетный палиндром наибольшей длины. Любой элемент массива может быть центром палиндрома....

Найти все трёхзначные числа, которые состоят из разных цифр, а их сумма равна заданному числу - C++
Помогите решить в С++ 2.2 Найти все трехзначные числа, которые состоят из разных цифр, а их сумма равна А (А вводится с клавиатуры).

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
15.06.2014, 17:38     Найти в символьном массиве трёхзначные числа #2
Строка в файле: ыва афы а 214 павыф п 234 аы875аф

Действие 1: Разбейте строку на слова
Действие 2: Создайте процедуру проверки каждого слова, в C++ есть такие функции как isDigit.
Действие 3: Далее уже нужные вам условия(подсчет, и т.п)
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
15.06.2014, 17:39     Найти в символьном массиве трёхзначные числа #3
Монтгомери, вот метод, которой проверяет является ли число трехзначным
C++
1
2
3
4
5
6
7
8
9
bool check_number(int number)
{
    size_t count(0);
    while(number!=0){
        number/=10;
        count++;
    }
    return count == 3;
}
но перед этим разбейте строку на слова, и если слово является числом, проверяйте
Renji
1822 / 1240 / 288
Регистрация: 05.06.2014
Сообщений: 3,547
15.06.2014, 17:56     Найти в символьном массиве трёхзначные числа #4
Монтгомери, вот метод, которой проверяет является ли число трехзначным
bool check_number(int number){return number>=100&&number<=999;}
Впрочем, ТС надо было текст анализировать.
Кто-нибудь, хоть подайте идею, как это сделать.
Универсальный ответ на вопрос "как что-то найти и/или заменить в тексте" - регулярные выражения. Теперь и в стандартной библиотеке!
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
15.06.2014, 18:11  [ТС]     Найти в символьном массиве трёхзначные числа #5
Т.е. только разбивать на слова? В если входной массив выглядит, к примеру, так: fasd224a54dasd5764s ? На этот случай есть варианты?
Я пробовал посимвольно проверять, но что-то фантазия у меня буксовала, и я так и не придумал, как это осуществить.

Тогда следующий вопрос: как разделить строку на слова?

Добавлено через 14 минут
Я нашёл только strtok, но массив идёт "сплошняком", без каких-либо разделителей, так что strtok не подошёл.
cooller
565 / 533 / 120
Регистрация: 25.12.2013
Сообщений: 1,456
15.06.2014, 18:16     Найти в символьном массиве трёхзначные числа #6
Монтгомери, вот пример, программа разбивает строку на слова
C++
1
2
3
4
5
6
7
8
9
10
#include<iostream>
#include<string>
#include<sstream>
int main()
{
    std::string str= "word1 word2",word;
    std::stringstream s(str);
    while(s>>word)
        std::cout<<word<<"\n";
}
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
15.06.2014, 18:21  [ТС]     Найти в символьном массиве трёхзначные числа #7
Эмм... А можете объяснить, как это работает?
Renji
1822 / 1240 / 288
Регистрация: 05.06.2014
Сообщений: 3,547
15.06.2014, 18:21     Найти в символьном массиве трёхзначные числа #8
В если входной массив выглядит, к примеру, так: fasd224a54dasd5764s ?
Найти все последовательности символов удовлетворяющие следующим условиям:
1) Начало последовательности совпадает с началом массива ИЛИ последовательности предшествует символ не являющийся цифрой.
2) Последовательность включает в себя три цифры.
3) Конец последовательности совпадает с концом массива ИЛИ за последовательностью идет символ не являющийся цифрой.

Дальше сами справитесь? И выучите регулярные выражения. Тогда ответ выше будет очевиден.
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
15.06.2014, 18:34  [ТС]     Найти в символьном массиве трёхзначные числа #9
Я впервые услышал о регулярных выражениях сейчас от вас. А типы char и string нам вообще дали в духе "есть такие вот зверушки", но что с ними делать так и не сказали. И тут вдруг практика с заданиями, которые мы и не могли решить, используя прочитанный нам на лекциях материал.
Нам давали только массивы, циклы и функции. И работать я умею только с арифметичесими типами.

Так что я до сих пор не представляю, что надо делать дальше -_- Те три условия понятны, но как их реализовать я всё ещё не понимаю.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
15.06.2014, 18:41     Найти в символьном массиве трёхзначные числа #10
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
#include <iostream>
#include <algorithm>
#include <vector>
#include <iterator>
#include <cctype>
 
 
bool is_digit ( char x )
{
   return isdigit ( x ) ;
}
bool is_not_digit ( char x )
{
   return !isdigit ( x ) ;
}
 
 
int main ( )
{
   std::string str = "fasd224a54dasd5764s" ;
   std::vector < std::string > vec ;
   for (
        std::string::const_iterator it = std::find_if(str.begin(),str.end(),is_digit) ,
        itEnd = str.end() ;
        it != itEnd ;
        it = std::find_if(it,itEnd,is_digit)
       ) {
      std::string::const_iterator itTemp = std::find_if(it,itEnd, is_not_digit ) ;
     if ( std::distance (it,itTemp) == 3 )
         vec.push_back(std::string(it,itTemp)) ;
      it=itTemp ;
   }
   for ( std::vector < std::string >::const_iterator it = vec.begin() , itEnd = vec.end() ; it!=itEnd ; ++it )
      std::cout << *it << std::endl ;
}
Renji
1822 / 1240 / 288
Регистрация: 05.06.2014
Сообщений: 3,547
15.06.2014, 18:45     Найти в символьном массиве трёхзначные числа #11
Нам давали только массивы, циклы и функции. И работать я умею только с арифметичесими типами.
char и есть арифметический тип со знаком. Символы идут в том же порядке как и в алфавите ('a'+1=='b'). Проверка того что символ - цифра осуществляется предельно тупо - C>='0'&&C<='9'.
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
15.06.2014, 19:26  [ТС]     Найти в символьном массиве трёхзначные числа #12
А такой вариант будет работать?:

C++
1
2
3
4
5
6
7
8
9
10
11
char *s; 
int three-digit_numbers /*кол-во трёхзначных чисел*/, snum /*сумма цифр числа*/ 
// ввод массива 
for(i=0;/*сюда надо узнать размерность массива*/;i++) 
{if(s[i]>='1'&&s[i]<='9') //находим цифру, с неё начинаем проверять 
while(s[i]>='0'&&s[i]<='9') 
{snum++; i++;}; 
/* i++ чтобы переходить на следующий виток внутреннего цикла, 
а потом, во внешнем цикле, пропустить все элементы, проверенные во внутреннем */ 
if(snum==3) three-digit_numbers++; 
snum=0;}
Renji
1822 / 1240 / 288
Регистрация: 05.06.2014
Сообщений: 3,547
15.06.2014, 19:39     Найти в символьном массиве трёхзначные числа #13
Не
C++
1
2
while(s[i]>='0'&&s[i]<='9') 
{snum++; i++;};
а
C++
1
2
for(;s[i]>='0'&&s[i]<='9'&&i<размер_массива;++i)
    ++snum;
Плюс three-digit_numbers и snum использованы без инициализации. В остальном должно работать.
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
15.06.2014, 21:17  [ТС]     Найти в символьном массиве трёхзначные числа #14
А, точно, совсем забыл про размерность массива. Спасибо.
А вот почему преинкремент? Определение я помню, но почему здесь именно они, а не постинкремент?
Renji
1822 / 1240 / 288
Регистрация: 05.06.2014
Сообщений: 3,547
15.06.2014, 21:28     Найти в символьном массиве трёхзначные числа #15
Постинкремент увеличивает значение переменной (одна ячейка памяти) и возвращает ее изначальное значение (вторая ячейка памяти). Преинкремент увеличивает переменную и возвращает ее новое значение (одна ячейка памяти). То есть, логически работает чуточку проще.

После того как компилятор выполнит оптимизацию разницы скорее всего не будет никакой, так что замена выполнена чисто для психологического комфорта.
Монтгомери
3 / 3 / 0
Регистрация: 10.09.2013
Сообщений: 116
15.06.2014, 22:05  [ТС]     Найти в символьном массиве трёхзначные числа #16
И снова благодарю
SlavaSSU
215 / 160 / 45
Регистрация: 17.07.2012
Сообщений: 587
16.06.2014, 09:21     Найти в символьном массиве трёхзначные числа #17
Цитата Сообщение от Renji Посмотреть сообщение
for(;s[i]>='0'&&s[i]<='9'&&i<размер_массива;++i)
* * ++snum;
кстати это же неверно по-моему!
надо условие выхода за границу ставить вперед, до проверки "на цифру".
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2014, 13:31     Найти в символьном массиве трёхзначные числа
Еще ссылки по теме:

В заданном символьном массиве найти слова, в которых первая буква слова встречается в нём ещё 1 раз - C++
Дан символьный массив. Вывести на печать те слова, в которых первая буква слова встречается в нём ещё 1 раз. гуглил, искал, нету подобной...

Проверка строк в двухмерном символьном массиве - C++
//--------------------------------------------------------------------------- #include&lt;conio.h&gt; #include&lt;iostream.h&gt; #pragma hdrstop ...

В символьном массиве заменить буквы на символ % - C++
Нужно ввести массив и заменить в нем все буквы на символ %.

Продублировать в символьном массиве буквы кириллицы - C++
Дан массив символов. Как найти и продублировать в данном символьном массиве буквы кириллицы?

Вывод в символьном массиве в обратном порядке - C++
По идее вроде как цикл верен, дальше получается мы должны последнему индексу присвоить значение нулевого, и далее первый индекс...


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

Или воспользуйтесь поиском по форуму:
Renji
1822 / 1240 / 288
Регистрация: 05.06.2014
Сообщений: 3,547
16.06.2014, 13:31     Найти в символьном массиве трёхзначные числа #18
Да, действительно, косяк.
Yandex
Объявления
16.06.2014, 13:31     Найти в символьном массиве трёхзначные числа
Ответ Создать тему
Опции темы

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