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

В заданной строке через пробелы записанны натуральные десятичные числа - C++

Восстановить пароль Регистрация
 
Stake88
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 8
18.03.2013, 22:11     В заданной строке через пробелы записанны натуральные десятичные числа #1
Задача такова : В заданной строке через пробелы записанны натуральные десятичные числа - слова в строке.
Вывести слова, которые делятся на 3.
Как сделать проверку делимости на 3 - представляю. Но как внутри перевести из char в int, собрать число, проверить его делимость на 3, и всё это в цикл.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <math.h>
using namespace std;
int main()
{ char mas[200];
float d=0;
int i=0,c=0; //c-хранение числа из массива, d-остаток от деления, i-счетчик положения в массиве
    cout<<"Vvedite chisla cherez probel (do 200 simvolov) \n";
    cin.getline(mas,sizeof(mas)); //ввод массива
     while (i!=199)
        {c=0;  while (mas[i]=!' ') 
            {c=c*10+i; i++;}; d=c%3;  //Проверяем делимость на 3, если число делится на 3, то выводим его.
                 if (d=0) {cout<<c<<" Chislo delitsya na 3 \n";} 
                 else {cout<<c<<" Chislo ne delitsya na 3 \n";}
     };
 system("pause");
return 0;
};
Добавлено через 4 часа 40 минут
Начал заново делать задачу.
Пока вот что получилось.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
    {
        char mas[200];
        float a,b,c;
        int i=0,u=0,y=0; //i-адрес в массиве, u-преобразование char в int, y - число для вывода
        cout<<"Vvedite chislo\n";
        cin.getline(mas,sizeof(mas));
 
    while
    (!(i==199)) 
 
    {y=0; if (mas[i]=='\0') {++i;};  
 
            do
            {u=mas[i]-48, y=y*10+u; ++i;} 
            while
            (!(mas[i]=='\0') || !(mas[i]==' '));
            
            cout<<y;
    }
        system("pause");
}
Не могу понять, почему не выходит из цикла.
C++
1
2
3
4
do
            {u=mas[i]-48, y=y*10+u; ++i;} 
            while
            (!(mas[i]=='\0') || !(mas[i]==' '));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2013, 22:11     В заданной строке через пробелы записанны натуральные десятичные числа
Посмотрите здесь:

В строке записано выражение вида m/n, где m и n – натуральные числа. Дописать в строку значение этого выражения, округлив его до сотых. C++
Составить процедуру вычисления значения целого числа по заданной строке символов C++
Составить процедуру вычисления значения целого числа по заданной строке символов C++
C++ Не считает десятичные числа
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dmitriy_M
1297 / 1178 / 106
Регистрация: 20.03.2009
Сообщений: 4,214
Записей в блоге: 11
18.03.2013, 23:00     В заданной строке через пробелы записанны натуральные десятичные числа #2
Есть такой класс std::stringstream
C++
1
2
3
4
5
6
7
8
9
10
 cout<<"Vvedite chisla cherez probel (do 200 simvolov) \n";
 cin.getline(mas,sizeof(mas)); //ввод массива
 std::stringstream strStream;
 strStream<<mas;
 while(!strStream.eof())
 {
  int i = 0;
  strStream>>i;
  std::cout<<i<<std::endl;
 }
Stake88
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 8
19.03.2013, 17:22  [ТС]     В заданной строке через пробелы записанны натуральные десятичные числа #3
Прочитал. Но ещё слишком слаб в программировании.
Так и не понял как пользоваться классом.
Нашел статью, http://habrahabr.ru/post/131977/, но из неё пока ничего не понял.

Добавлено через 5 часов 50 минут
Вот что в итоге получилось. Всё вроде работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main()
    {
        char mas[200];
        float d; //Остаток от деления
        int i=0,u=0,y=0,p; //i-адрес в массиве, u-преобразование char в int, y - число для вывода
        cout<<"Vvedite chislo\n";
        cin.getline(mas,sizeof(mas));
 
    while
    (!(mas[i]=='\0')) 
    
    {y=0;  
             while  (!(mas[i]==' ' ||  mas[i]=='\0'))   
             {u=mas[i]-48, y=y*10+u; ++i;}; 
    d=y%3;  
    if (d==0) {cout<<y<<" delitsya na 3 bez ostatka \n";}
    if (mas[i]=='\0') goto L1;
    i++;}
    L1:
    cin>>p;
    return 0;
 
}
Но одно НО. Как можно сделать без goto ? Уже и не понимаю. В втором цикле while, не выполняется условие, если конец массива '\0'/ Что с ним, что без него, всё равно заедает без goto.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
19.03.2013, 19:41     В заданной строке через пробелы записанны натуральные десятичные числа #4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <string.h>
 
int main ()
{
    char string[256];
    std::cout << "Input the string: ";
    gets(string);
 
    std::cout << "Result: " << std::endl;
    char *strNumber = strtok(string, " ");
 
    while (strNumber) {
        int number = atoi(strNumber);
        if (!(number % 3))
            std::cout << number << " ";
        strNumber = strtok(nullptr, " ");
    }
 
    return 0;
}
Stake88
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 8
19.03.2013, 20:05  [ТС]     В заданной строке через пробелы записанны натуральные десятичные числа #5
Ev[G]eN, спасибо большое !
Но для меня это пока слишком сложно, если спросят, не смогу рассказать как она работает. Буду сдавать свой вариант с goto .)
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
19.03.2013, 20:07     В заданной строке через пробелы записанны натуральные десятичные числа #6
сложно??
мне кажется, что это гораздо проще, чем то, что писали Вы)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.03.2013, 20:12     В заданной строке через пробелы записанны натуральные десятичные числа
Еще ссылки по теме:

C++ В заданной строке установить пробелы вместо символов
В заданной строке определить подстроку, являющуюся десятичной записью самого большого целого числа C++
Найти все трехзначные десятичные числа с заданной суммой цифр C++

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

Или воспользуйтесь поиском по форуму:
Stake88
0 / 0 / 0
Регистрация: 11.03.2013
Сообщений: 8
19.03.2013, 20:12  [ТС]     В заданной строке через пробелы записанны натуральные десятичные числа #7
Ну, через какое-то время может будет проще.
Начал заниматься программирование 4 дня назад ))
Yandex
Объявления
19.03.2013, 20:12     В заданной строке через пробелы записанны натуральные десятичные числа
Ответ Создать тему
Опции темы

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