Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2017, 02:31   #1
SmErT
Новичок
Джуниор
 
Регистрация: 05.05.2017
Сообщений: 1
Вопрос Разделить строку и вывести результат на экране

всем привет!
пишу маленькую программу на c++, столкнулся с небольшой проблемой, которая портит весь результат.
не могли ли вы помочь?

Описание программы.

буфер "32,225228.000,A,5540.613048,N,3741 .581676,E,2.22,112.47,240417,,E,A"

вызываем подпрограмму get_GPS

Далее чтение из буфера 5540.613048
чтение из буфера N

вызываем подпрограмму convert2Degrees

конвертируем строчное число 5540.613048 в число с плавающей точкой float
5540.613048==>55
5540.613048==>44
5540.613048==>0.613048*60= 36,78288
конвертируем число с плавающей точкой 55, 44 36,78288 в строку
55°40'36,7828"N

чтение из буфера 3741.581676
чтение из буфера E

вызываем подпрограмму convert2Degrees

конвертируем строчное число 3741.581676 в число с плавающей точкой float
3741.581676==>37
3741.581676==>41
3741.581676==>0.581676*60= 34.90056
конвертируем число с плавающей точкой 37, 41 34.90056 в строку
37°41'34.9005"E

чтение из буфера 2.22
конвертируем строчное число 2.22 в число с плавающей точкой float
2.22*1.852=4.11
конвертируем число с плавающей точкой 4.11 в строку

чтение из буфера 112.47

печатаем на экране результат 55°40'36,7828"N
печатаем на экране результат 37°41'34.9005"E
печатаем на экране результат 4.11
печатаем на экране результат 112.47

Код программы


Код:
#include <iostream>
#include <cstdlib>
#include <stdio.h>
#include <math.h>
#include <string.h>

using namespace std;

char RMC_buffer[]="32,225228.000,A,5540.613048,N,3741.581676,E,2.22,112.47,240417,,E,A";
char latitude[15];

char longitude[15];
char speedOTG[8];
char course[8];


int convert2Degrees(char *coord1, char coordDir, char *coord){//input data coord1 and coordDir output coord
int DD=0, MM=0;
float SS=0;
//memset(coord,0,sizeof(char)*15);
SS=atof(coord1);                                      //convert input data coord1 to float
                                                      //5540.613048 = DDMM.mmmmmm from datasheet simcom 908
DD = (int)SS/100L;                                    //extract DD
MM = (int)SS % 100L;                                  //extract MM
SS=(SS-((DD*100)+MM))*60;                               //extract .mmmmmm and convert him to SS
//dtostrf(SS, 2, 4, SS_SSSS);                           //convert float SS to string SS.SSSS
sprintf(coord,"%d°%d\'%.4f\"%c",DD,MM,SS,coordDir);//regrupe DD°MM'SS.SSSS"N
return 0;
}

void get_GPS(char *buff, char *lat, char *log, char *spee_d,  char *dir){
    char latitude1[15]={0}, latitudeDir;
    char longitude1[15]={0}, longitudeDir;
    char *istr = 0;
    int len=0, i;
    float speed_f=0;

    istr = strtok(buff, ",");					//from buffer
    for (i=0; i<3; i++)
    istr = strtok(NULL,",");

    len=strlen(istr);
	for(i=0; i < len; i++){					//Get latitude1
		latitude1[i]=istr[i];
	}
	latitude1[i++] = '\0';

    istr = strtok(NULL,",");
	latitudeDir = istr[0];                  // Get latitude directon

	convert2Degrees(latitude1, latitudeDir, lat);

    istr = strtok(NULL,",");
    len = strlen(istr);
	for(i=0; i < len; i++)						//Get longitude1
		longitude1[i]=istr[i];
	longitude1[i++] = '\0';

    istr = strtok(NULL,",");
	longitudeDir = istr[0];

	convert2Degrees(longitude1, longitudeDir, log);

	istr = strtok(NULL,",");
	len = strlen(istr);
	for(i=0; i < len; i++)						// Get speed over ground. Unit is knots.
		spee_d[i]=istr[i];
	spee_d[i++] = '\0';
	speed_f=atof(spee_d);
    speed_f=speed_f*1.852;
    sprintf(spee_d,"%.2f",speed_f);

	istr = strtok(NULL,",");
	len = strlen(istr);
	for(i=0; i < len; i++)						//Get course
		dir[i]=istr[i];
	dir[i++] = '\0';

}


/*
void get_GPS(char *buff, char *lat, char *log,c har *spee_d,  char *dir){

char latitude1[15]={0}, latitudeDir[2]={0};
char longitude1[15]={0}, longitudeDir[2]={0};
float speed_f=0;

strtok(buff, ",");                                    //from buffer
strtok(NULL, ",");
strtok(NULL, ",");
strcpy(latitude1,strtok(NULL, ","));                  //Get latitude
strcpy(latitudeDir,strtok(NULL, ","));                // Get latitude directon

convert2Degrees(latitude1, latitudeDir, lat);

strcpy(longitude1,strtok(NULL, ","));                 // Get longitude
strcpy(longitudeDir,strtok(NULL, ","));               // Get longitude directon

convert2Degrees(longitude1, longitudeDir, log);

strcpy(spee_d,strtok(NULL, ","));                   // Get speed over ground. Unit is knots.

	speed_f=atof(spee_d);
    speed_f=speed_f*1.852;
    sprintf(spee_d,"%.2f",speed_f);

strcpy(dir,strtok(NULL, ","));                     // Get course

}*/

int main() {
    memset(latitude,0,sizeof(latitude));
    memset(longitude,0,sizeof(longitude));
    memset(speedOTG,0,sizeof(speedOTG));
    memset(course,0,sizeof(course));
    get_GPS(RMC_buffer,latitude, longitude, speedOTG, course );
    //cout << latitude << endl;
    //printf("%s\n",latitude);
    printf("latitude = %s\n",latitude);
printf("longitude = %s\n",longitude);
printf("speedOTG = %s\n",speedOTG);
printf("course = %s\n",course);

   // printf("%s\n",longitude);
   // printf("%s\n",speedOTG);
   // printf("%s\n",course);
    return 0;
}
проблема в том, что. на терминале совсем другое печатается

latitude = 55░40'36.7969"N37░41'34.9072"E4. 11
longitude = 37░41'34.9072"E4.11
speedOTG = 4.11
course = 112.47

а должно быть так:

latitude =55░40'36.7969"N
longitude =37░41'34.9072"E
speedOTG = 4.11
course = 112.47

да результаты не совпадают потому что я не использовал double.
потому что эта программа будет перенесена на Arduino. а в Arduino у float и double такое же значение.
спасибо.
SmErT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
разделить строку mitiay Общие вопросы Delphi 3 18.10.2015 15:09
разделить строку!!!! dzaymko Microsoft Office Excel 1 01.05.2012 17:03
Разделить строку Alex1991 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 20.02.2011 19:25
Разделить строку DKENT Общие вопросы Delphi 6 12.02.2011 02:04