Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [c++] конкатенация строк


Автор: SAVEL 7.10.2007, 17:22
Товарищи помогите решить проблемку! 

Необходимо связать 2 переменные типа символьный массив в одну строку, smile а потом эту одну строку перевести в красивое double(наверное используя atof)! Причем значение что первого, что второго аргумента - символьные массивы, а для дальнейшего вычисления необходимы только цифры! 

Буду очень благодарен если поможете!!!

Автор: Dogo 7.10.2007, 23:05
Код

#include <time.h>
#include <stdlib.h>

#define N 3
#define M 4
#define MAX_INTEGER 100

int  rankOfInteger(int iNumber_);
int  fillArrWithIntegers(int iArr_[], int iSizeOfArr_);
void fillArrWithChar(int iArr_[], int iSizeOfArr_, char* szString_);

int _tmain(int argc, _TCHAR* argv[])
{
  int  iFirstArr[N], iSecondArr[M], iCurrentNumber, iSizeOfCharArr=0;
    
    srand(time(0));

  iSizeOfCharArr  = fillArrWithIntegers(iFirstArr,  N);
  iSizeOfCharArr  +=  fillArrWithIntegers(iSecondArr, M);

  char *szCharArr = new char[iSizeOfCharArr+2];//Один байт для '/0' второй для десятичной точки

  strcpy(szCharArr, "");

  fillArrWithChar(iFirstArr,  N, szCharArr);
  strcat(szCharArr, ".");
  fillArrWithChar(iSecondArr, M, szCharArr);

  double dNumber = atof(szCharArr);
    
  return 0;
}


void fillArrWithChar(int iArr_[], int iSizeOfArr_, char* szString_)
{
  int iCurrentNumber;
  for(int i=0; i<iSizeOfArr_; i++)
  {
    iCurrentNumber = iArr_[i];
    char *szTemp = new char[rankOfInteger(iCurrentNumber)+1];
    strcpy(szTemp, "");
    itoa(iCurrentNumber, szTemp, 10);
    strcat(szString_, szTemp);
  } 

  return;
}



int fillArrWithIntegers(int iArr_[], int iSizeOfArr_)
{
  int iCurrentNumber, iSizeOfCharArr=0;

  for(int i=0; i<iSizeOfArr_; i++)
  { 
    iCurrentNumber =  rand()%MAX_INTEGER;
    iArr_[i]       =  iCurrentNumber;
    iSizeOfCharArr += rankOfInteger(iCurrentNumber);  
  }

  return iSizeOfCharArr;
}



int rankOfInteger(int iNumber_)
{  
  int iDivisior = 10;
  int iResult, iRank=0, iTemp;

  do
  {
    iResult = iNumber_ / iDivisior;
    iRank += 1;
    iDivisior *= 10;
  }
  while(iResult != 0);
  
  if(0 == iRank)
    return -1;
  else
    return iRank;
}

Автор: SAVEL 8.10.2007, 20:48
 smile

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