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

перевод строки в число, определить делится ли оно на 4 - C++

Восстановить пароль Регистрация
 
nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
15.06.2013, 15:56     перевод строки в число, определить делится ли оно на 4 #1
пожалуйста помогите! нужно определить делится ли строка на 4. я так понял что функция atoi не подходит, как еще это можно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2013, 15:56     перевод строки в число, определить делится ли оно на 4
Посмотрите здесь:

Дано натуральное число N. Определить, является ли оно палиндромом. Число-палиндром можно читать справа налево и слева направо одинаково. Например, C++
Определить, делится ли число на 4 без остатка C++
C++ Определить, делится ли это число на 15
C++ Дано натуральное четырехзначное число. Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка
Если a делится на b или b делится на a, то вывести 1, иначе – любое другое число C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
15.06.2013, 21:03     перевод строки в число, определить делится ли оно на 4 #2
Если не нужна проверка на ошибки(т.е. строка гарантировано представляет собой целое число) можно использовать и atoi.
Если нужна самая элементарная проверка: stringstream, sscanf. Более тщательная: strtol, stoi(C++11).
nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
15.06.2013, 23:51  [ТС]     перевод строки в число, определить делится ли оно на 4 #3
вводятся буквы и цифры
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.06.2013, 13:31     перевод строки в число, определить делится ли оно на 4 #4
В таком случае либо scanf или stringstream(с ними я думаю вы способны разобраться самостоятельно), либо strtol или stoi.
Как я уже и сказал, scanf и stringstream не позволяют определить какая именно ошибка произошла при конвертировании.
Ниже простой пример с использованием strtol(если ваш компилятор поддерживает С++11, лучше заменить str_to_int на std::stoi)
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
#include <cerrno>
#include <cstdlib>
#include <string>
#include <limits>
#include <stdexcept>
#include <iostream>
 
int str_to_int(const std::string& str)
{
    if(str.empty())
        throw std::invalid_argument("invalid argument");
 
    errno = 0;
    char* endptr = NULL;
    long int value = std::strtol(str.c_str(), &endptr, 10);
 
    // последние два условия на случай, если sizeof(int) != sizeof(long int)
    if(errno == ERANGE ||
       value < std::numeric_limits<int>::min() ||
       value > std::numeric_limits<int>::max())
    {
        throw std::out_of_range ("out of range");
    }
 
    if(*endptr != '\0')
        throw std::invalid_argument("invalid argument");
 
    return value;
}
 
int main()
{
    std::string str;
    std::getline(std::cin, str);
 
    try
    {
        int value = str_to_int(str); 
        std::cout << value << std::endl;
    }
    catch(std::exception& e)
    {
        std::cerr << e.what() << '\n';
    }
}
nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
16.06.2013, 13:43  [ТС]     перевод строки в число, определить делится ли оно на 4 #5
если честно я практически не понимаю что за код вы привели))

Добавлено через 9 минут
да и похоже что ваша программа преобразует только числа, а после замены даже работать перестала)
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.06.2013, 13:58     перевод строки в число, определить делится ли оно на 4 #6
если честно я практически не понимаю что за код вы привели
Я не привёл ничего такого, что выходило бы за рамки базового курса по C++ По сути, понимать вам нужно только то, что находится в функции main.
да и похоже что ваша программа преобразует только числа, а после замены даже работать перестала)
А что ещё должна делать функция, которая конвертирует строку в число? Или у ваc числа в шестнадцатиричной системе счисления? Честно говоря, я начинаю сомневаться в том, что понимаю, что именно вам нужно
P.S. в предыдущем сообщении конечно же имелся в виду не scanf, а sscanf.
nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
16.06.2013, 14:40  [ТС]     перевод строки в число, определить делится ли оно на 4 #7
rangerx, написал такую прогу но ее результат кажется мало чем отличается

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
#include<iostream>
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
using namespace std;
char txt[40];
int i,s,n,f,k,m;
    main ()
  {
  
  cout<<"\vvedite TEXT";
  gets(txt);
 cout<<"\n‚л ўўҐ«Ё бва®Єг:";
  puts(txt);
  n=strlen(txt);
  f=0;
      for(i=0;i<n;i++)
         if(!((txt[i]=='0')||(txt[i]=='1')))
            f++;
 
        if(f!=0) cout<<"\n‚ўҐ¤Ґ**л© ў*¬Ё ⥪бв *Ґ пў«пҐвбп зЁб«®¬";
         else
            {
            k=0;
            s=0;
            for(i=0;i<n;i++)
              {
               m=txt[n-i-1]*k;
               s=s+m;
               k=k*2;
              }
              cout<<s;
              if(s%4==0)
              cout<<"Da delitsya";
              else cout<<"Net ne delitcya";
               }
 
 
   while(!kbhit());
   return 0;
   }
Добавлено через 1 минуту
нужно определить является ли текст, в который входят буквы и цифры десятичной записью числа кратного 4

Добавлено через 2 минуты
так же пробовал с функцией atoi

Добавлено через 38 минут
увы я не знаю в какой системе счисления должен быть текст )
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.06.2013, 16:44     перевод строки в число, определить делится ли оно на 4 #8
Цитата Сообщение от nighthigt Посмотреть сообщение
нужно определить является ли текст, в который входят буквы и цифры десятичной записью числа кратного 4
В таком случае не совсем понятно, чем вас не устроил варинт с использованием strtol. Если хотите наиболее простой вариант, используйте sscanf
C++
1
2
3
4
5
6
7
8
9
int value;
if(sscanf(txt, "%d", &value) == 1)
{
    // проверяем делится ли value на 4
}
else
{
    // выводим сообщение об ошибке
}
Но, в таком случае строки вида 123abc тоже будут считаться корректными(123 конвертируется, abc отбрасывается).

Добавлено через 14 минут
Вот рабочий вариант с использованием функции strtol
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
65
66
#include <cerrno>
#include <cstdlib>
#include <climits>
#include <iostream>
 
// результат возвращаемый функцией str_to_int
enum CnvrtResult
{
    cnvrtSuccess,         // корректное завершение функции
    cnvrtInvalidArgument, // ошибка: строка не является целым
    cnvrtOutOfRange       // ошибка: значение выходит за допустимый диапазон
};
 
CnvrtResult str_to_int(int& dest, const char* src)
{
    // строка пуста
    if(*src == '\0')
        return cnvrtInvalidArgument;
 
    errno = 0;
    char* endptr = NULL;
    long int value = std::strtol(src, &endptr, 10);
 
    // значение из src не помещается в тип int
    // (последние два условия на случай, если sizeof(int) != sizeof(long int))
    if(errno == ERANGE || value < INT_MIN || value > INT_MAX)
        return cnvrtOutOfRange;
 
    // не удалось дойти до конца строки(встретились недопустимые для целого символы)
    if(*endptr != '\0')
        return cnvrtInvalidArgument;
 
    dest = value;
 
    return cnvrtSuccess;
}
 
int main()
{
    using std::cin;
    using std::cout;
 
    char str[40];
    cout << "vvedite stroku: ";
    cin.getline(str, sizeof(str));
 
    int value;
    switch(str_to_int(value, str))
    {
        case cnvrtInvalidArgument:
            cout << "oshibka: vvedyonnoye znacheniye ne yavlyaetsya zapisyu celogo chisla\n";
            break;
 
        case cnvrtOutOfRange:
            cout << "oshibka: vvedyonnoye znacheniye vihodit za dopustimiy diapazon tipa int ["
                 << INT_MIN << "..." << INT_MAX << "]\n";
            break;
 
        case cnvrtSuccess:
            cout << "delitsya na 4 bez ostatka: ";
            if(value % 4 == 0)
                cout << "da\n";
            else
                cout << "net\n";
    }
}
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 17:02     перевод строки в число, определить делится ли оно на 4 #9
nighthigt, лови
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <string>
#include <sstream>
#include <iostream>
using namespace std;
 
int main()
{
    int value = 0;
    string str= "12584";
    stringstream ss(str);
    if(!(ss>>value))
        cout<<"Incorrect string"<<endl;
    else
    {
        cout<<"value : "<<value;
        if( value % 4 == 0 )
            cout<<" divides on 4"<<endl;
        else
            cout<<" not divides on 4"<<endl;
    }
    cin.get();
    return 0;
}
Миниатюры
перевод строки в число, определить делится ли оно на 4  
nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
16.06.2013, 17:40  [ТС]     перевод строки в число, определить делится ли оно на 4 #10
Добавлено через 32 секунды
-=ЮрА=-, эта программа переводит только цифры в строки?
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 17:46     перевод строки в число, определить делится ли оно на 4 #11
Цитата Сообщение от nighthigt Посмотреть сообщение
-=ЮрА=-, эта программа переводит только цифры в строки?
- эта программа перевод строку

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
string str= "12584";
которую ты можешь ввести сам посредством cin>>str; в число
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ss>>value
Вот как раз это задание реализовано
Цитата Сообщение от nighthigt Посмотреть сообщение
пожалуйста помогите! нужно определить делится ли строка на 4.
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.06.2013, 17:49     перевод строки в число, определить делится ли оно на 4 #12
-=ЮрА=-, этот вариант ничем не отличается от того, что делает sscanf.
-=ЮрА=-
16.06.2013, 17:52
  #13

Не по теме:

Цитата Сообщение от rangerx Посмотреть сообщение
=ЮрА=-, этот вариант ничем не отличается от того, что делает sscanf.
- тем что sstream это С++ а scanf пережиток от Си.

rangerx, я что то не понял, претензии какие-то?

nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
16.06.2013, 17:53  [ТС]     перевод строки в число, определить делится ли оно на 4 #14
-=ЮрА=-, rangerx, программа должна переводить в число еще и буквы. само задание:
задан текст, в который входят только цифры и буквы. определить, является ли текст десятичной записью числа, кратного 4
rangerx
1908 / 1517 / 139
Регистрация: 31.05.2009
Сообщений: 2,876
16.06.2013, 17:59     перевод строки в число, определить делится ли оно на 4 #15
-=ЮрА=-, проблема в том, что строка вида 123abc тоже будет считаться целым(abc будет отброшено), несмотря на то, что на самом деле строка целым числом не является. Хотя, возможно ТС утсраивает и такой вариант...
-=ЮрА=-
Заблокирован
Автор FAQ
16.06.2013, 18:00     перевод строки в число, определить делится ли оно на 4 #16
nighthigt, что значит перевести в число буквы?

Не по теме:

Это попахивает бредом либо неверно понятым либо приведенным заданием...

nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
16.06.2013, 18:37  [ТС]     перевод строки в число, определить делится ли оно на 4 #17
каждая буква имеет свой код. я так понимаю, что надо перевести этот код в десятичную систему
HighPredator
16.06.2013, 18:40
  #18

Не по теме:

Всегда торчал с таких заданий... Раз текст содержит букву, то он в принципе не является десятичным числом.

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.06.2013, 18:44     перевод строки в число, определить делится ли оно на 4
Еще ссылки по теме:

C++ Найти натуральное число M такое, что M делится на N и сумма цифр M делится на N
C++ Для четного введенного числа определить, делится ли оно на 10, для нечетного - делится ли оно на 5
Определить все цифры в цифровой записи данного числа, на которые оно делится без остатка C++

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

Или воспользуйтесь поиском по форуму:
nighthigt
0 / 0 / 0
Регистрация: 15.06.2013
Сообщений: 14
16.06.2013, 18:44  [ТС]     перевод строки в число, определить делится ли оно на 4 #19
))но ведь можно наверно как эту проблему решить?
Yandex
Объявления
16.06.2013, 18:44     перевод строки в число, определить делится ли оно на 4
Ответ Создать тему
Опции темы

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