Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> модификация типа: char*-> int (C++) 
V
    Опции темы
serendip
Дата 11.1.2006, 01:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Есть строка типа char* из трёх символов, последний символ - символ конца строки.
Первые два содкржат цифры, которые вместе образуют десятичное число.
Как перевести это число в integer?(С++)
smile smile smile smile
PM MAIL ICQ   Вверх
serendip
Дата 11.1.2006, 02:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



int atoi( const char* s)
smile

Это сообщение отредактировал(а) serendip - 11.1.2006, 02:33
PM MAIL ICQ   Вверх
serendip
Дата 12.1.2006, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Уважаемые господа программистыыыыыыы!!!!!!!
Данная функция переводит только первый символ строки, т.е.
Код

 int k;
char* a=new char[3];
a[0]='1';
a[1]='2;
a[2]='\0';
k=atoi(a);
// k=1

в принципе, понятно почему. Но как же быть тогда?!!! smile smile


Это сообщение отредактировал(а) serendip - 12.1.2006, 01:12
PM MAIL ICQ   Вверх
blackofe
Дата 12.1.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 29.11.2005

Репутация: 4
Всего: 4



ты чем компилишь? у меня vc++ 7.1 на это

Код

int main()
{
    int k;
    char *a = new char[3];
    a[0]='1';
    a[1]='2';
    a[2]='\0';
    k = atoi(a);
    cout << a << endl;
    cout << k << endl;
    delete [] a;
    return 0;
}

выдал

Код

12
12


в общем, довольно ожидаемо.
PM MAIL   Вверх
serendip
Дата 12.1.2006, 01:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Компилю С++ Builder 6.0
я сначала предположила:
Код

 int r[2];
 int c;    
 char* a=new char[3];    

a[0]='1';    
a[1]='2';    
a[2]='\0';
    
 r[0]=atoi(a[0]);
 r[1]=atoi(a[1]);
c=r[0]*10+r[1];



Но так к сожалению:
[C++ Error] Unit1.cpp(126): E2034 Cannot convert 'int' to 'const char *'
[C++ Error] Unit1.cpp(126): E2342 Type mismatch in parameter '__s' (wanted 'const char *', got 'char')

Не знаю, может ещё где ошиблась..
я правда потом в Memo вывожу:
Form1->Memo2->Lines->Add(IntToStr(dv[i]));
хотя тут вроде всё в порядке

Да, у меня вышеуказанный код тоже замечательно работает.... smile

Это сообщение отредактировал(а) serendip - 12.1.2006, 01:32
PM MAIL ICQ   Вверх
_hunter
Дата 12.1.2006, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 16
Всего: 98



если пишем в билдере -- зачем atoi()? вполне достаточно и StrToInt()...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
blackofe
Дата 12.1.2006, 21:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 29.11.2005

Репутация: 4
Всего: 4



Цитата(serendip @ 12.1.2006, 01:24)
Но так к сожалению:
[C++ Error] Unit1.cpp(126): E2034 Cannot convert 'int' to 'const char *'
[C++ Error] Unit1.cpp(126): E2342 Type mismatch in parameter '__s' (wanted 'const char *', got 'char')

ну так все же нормально разжевано: компилятор ожидает const char *, а вы ему char подсовываете. в вашем примере:

Код

char *a = new char[3]; // a - строка, суть массив из char'ов
a[0] = '1';   // элементу строки (массива из char'ов) присваивается значение типа char
          // (символ, взятый в апострофы, в c/c++ имеет тип char)
r[0] = atoi(a[0]);  // а здесь вы пытаетесь сунуть параметром в функцию atoi() char,
          // хотя она описана как int atoi(const char *string);, т.е. принимает
          // со-овсем не char, а константную c-строку (const char *)

PM MAIL   Вверх
serendip
Дата 16.1.2006, 02:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Благодарю smile Видимо, я просто не до конца понимаю указатели..

PM MAIL ICQ   Вверх
Fighter
Дата 16.1.2006, 02:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 810
Регистрация: 5.1.2005

Репутация: нет
Всего: 2



Цитата(serendip @ 12.1.2006, 00:06 Найти цитируемый пост)

Данная функция переводит только первый символ строки, т.е.


Не знаю, но у меня в Turbo C++ все нормально переводит, даже если в конце строки стоит "\n";
PM MAIL   Вверх
LuckLess
Дата 16.1.2006, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 180
Регистрация: 15.9.2004

Репутация: 1
Всего: 1



можно еще попользовать строковые потоки...

Код

...
template<class T>
T ConvertString(std::string Val){//не ссылка для того , чтобы можно было использовать char*
std::istringstream istr(Val);
T ret;
istr>>ret
return ret;
}
...


Это сообщение отредактировал(а) LuckLess - 16.1.2006, 16:28
PM MAIL   Вверх
threef
Дата 16.1.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 375
Регистрация: 27.10.2005
Где: Запорожье

Репутация: 9
Всего: 10



Много чё можно использовать
Код

    char *a = new char[3];
    a[0]='1';
    a[1]='2';
    a[2]='\0';
    int x=(a[0]-'0')*10+a[1]-'0';


для этого конкретного случая, например.
PM MAIL   Вверх
serendip
Дата 17.1.2006, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 32
Регистрация: 20.12.2005

Репутация: нет
Всего: нет



Спасибоsmile
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.