Код: Выделить всё
asfsdfjwe323kj123ljlj123lljk1
Вопрос:
Как выполнить поиск чисел(не цифр) в данной ситуации и заменить данные числа на hex вид.
Код: Выделить всё
if((c >= '0') && (c <= '9'))
k++;

Спасибо.
P.S.С++
Модератор: Модераторы разделов
Код: Выделить всё
asfsdfjwe323kj123ljlj123lljk1
Код: Выделить всё
if((c >= '0') && (c <= '9'))
k++;
apprentice писал(а): ↑28.12.2009 13:58а в чем проблема?
копируете все не числовые символы в один буфер, когда встречаете числовой символ начинаете копировть в другой буфер, затем делаете преобразование и результат копируете в первый буфер.
Код: Выделить всё
#include <stdio.h>
int main() {
const char* str = "asfsdfjwe323kj123ljlj123lljk1";
char out[1024];
int n = 0; bool q = false;
const char* c; char* k;
for( c = str, k = out;; c++ ) {
if( 10 > (unsigned char) ( *c - '0' ) ) {
q = true;
( n *= 10 ) += *c - '0';
} else {
if( q ) {
int l = n;
do { k++; l >>= 4; } while( l );
char* m = k;
do {
if( ( *--m = '0' + ( n & 15 ) ) > '9' )
*m += 'a' - ( '9' + 1 );
n >>= 4;
} while( n );
q = false;
}
if( !( *k++ = *c ) ) break;
}
}
printf( "%s", out );
return 0;
}
Код: Выделить всё
while(b.get(c[0]))
{
if((c[0] >= '0') && (c[0] <= '9'))//количество чисел в строке
{
strcat(chislo[i],&c[0]);
}
else
{
if(*chislo[i])
{
//cout<<chislo[i]<<" ";
delete chislo[i];
i++;
chislo[i] = new char[11];
}
}
}
cout<<"Количество десятичных чисел в строке:" <<i<<endl;
}
Это не C++, а C.
Почему 11?
Почему 11?
А где, собственно, перевод в hex?
Код: Выделить всё
#include <iostream>
unsigned char TETR_TO_HEX(unsigned char tetr)
{
tetr=tetr&0x0F;
if(tetr<10)
{
tetr+='0';
}
else
{
tetr-=10;
tetr+='A';
}
return tetr;
}
void BYTE_TO_HEX(unsigned char byte)
{
char L = TETR_TO_HEX(byte);
byte=byte>>4;
char H = TETR_TO_HEX(byte);
std::cout<<H<<L<<std::endl;
}
int main()
{
BYTE_TO_HEX(255);
BYTE_TO_HEX(12);
BYTE_TO_HEX(32);
BYTE_TO_HEX(128);
BYTE_TO_HEX(33);
return 0;
}
Код: Выделить всё
navi ~ $ ./a.out
1llll2llll3lll10llll11lll12lll15lll16lll20
<^D>
1llll2llll3lllallllblllclllflll10lll14
Код: Выделить всё
#include <iostream>
#include <strstream>
#include <cctype>
using namespace std;
int main() {
char c;
strstream buf;
while(cin.get(c)) {
if(isdigit(c)) {
strstream snum;
do {
snum << c;
} while (cin.get(c) && isdigit(c));
int num;
snum >> num;
buf << hex << num;
}
buf << c;
}
cout << buf.str();
return 0;
}
NickLion писал(а): ↑29.12.2009 16:53
Ну и чем я отжёг? Я прекрасно знаю, что С++ не включает в себя С. Но он построен на основе С и чистого С++ не существует - это маразм.
Безусловно С++ многим обязан языку С [8], который сохраняется как его
подмножество. Сохранены и все свойственные С средства низкого уровня,
предназначенные для решения самых насущных задач системного
программирования.
.....
Развитие языка С++ происходило на базе языка С, и, за небольшим
исключением, С был сохранен в качестве подмножества C++. Базовый язык С
был спроектирован таким образом, что имеется очень тесная связь между
типами, операциями, операторами и объектами, с которыми непосредственно
работает машина, т.е. числами, символами и адресами. За исключением
операций new, delete и throw, а также проверяемого блока, для выполнения
операторов и выражений С++ не требуется скрытой динамической аппаратной
или программной поддержки.