Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > модификация типа: char*-> int (C++)


Автор: serendip 11.1.2006, 01:47
Есть строка типа char* из трёх символов, последний символ - символ конца строки.
Первые два содкржат цифры, которые вместе образуют десятичное число.
Как перевести это число в integer?(С++)
smile smile smile smile

Автор: serendip 11.1.2006, 02:32
int atoi( const char* s)
smile

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

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

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

Автор: blackofe 12.1.2006, 01:18
ты чем компилишь? у меня 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


в общем, довольно ожидаемо.

Автор: serendip 12.1.2006, 01:24
Компилю С++ 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

Автор: _hunter 12.1.2006, 11:39
если пишем в билдере -- зачем atoi()? вполне достаточно и StrToInt()...

Автор: blackofe 12.1.2006, 21:59
Цитата(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 *)

Автор: serendip 16.1.2006, 02:26
Благодарю smile Видимо, я просто не до конца понимаю указатели..

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

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


Не знаю, но у меня в Turbo C++ все нормально переводит, даже если в конце строки стоит "\n";

Автор: LuckLess 16.1.2006, 16:27
можно еще попользовать строковые потоки...

Код

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

Автор: threef 16.1.2006, 20:17
Много чё можно использовать
Код

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


для этого конкретного случая, например.

Автор: serendip 17.1.2006, 19:58
Спасибоsmile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)