使用c语言的字符串
我尝试用结构中的数据进行插值搜索。例如,我将时间2014-02-13T18:50:00作为输入,我希望插值搜索返回temp 4.0和hum 75,但有些东西不起作用。 我认为用(高-低)*(低)计算中间值时会出现问题,但我不明白为什么会发生这种情况使用c语言的字符串,c,search,long-long,C,Search,Long Long,我尝试用结构中的数据进行插值搜索。例如,我将时间2014-02-13T18:50:00作为输入,我希望插值搜索返回temp 4.0和hum 75,但有些东西不起作用。 我认为用(高-低)*(低)计算中间值时会出现问题,但我不明白为什么会发生这种情况 #包括 #包括 #定义尺寸11 结构metrhseis{ 字符时间[21]; 内部温度; 内哼; }; 长整型字符串(const char arr[]); void interpolation_search(struct metrhseis arr
#包括
#包括
#定义尺寸11
结构metrhseis{
字符时间[21];
内部温度;
内哼;
};
长整型字符串(const char arr[]);
void interpolation_search(struct metrhseis arr[],char*in);
int main(){
[25]中的char;
int inI;
int j;
结构metrhseis s[SIZE];
strcpy(s[0]。时间,“2014-02-13T06:20:00”);
温度=3.0;
s[0].hum=93;
strcpy(s[1]。时间,“2014-02-13T13:50:00”);
温度=7.0;
s[1],hum=66;
strcpy(s[2]。时间,“2014-02-13T06:00:00”);
温度=2;
s[2].hum=91;
strcpy(s[3]。时间,“2014-02-13T03:00:00”);
温度=3;
s[3],hum=84;
strcpy(s[4]。时间,“2014-02-13T13:00:00”);
温度=6;
s[4],hum=62;
strcpy(s[5]。时间,“2014-02-13T18:50:00”);
温度=4.0;
s[5],hum=75;
strcpy(s[6]。时间,“2014-02-13T13:20:00”);
温度=6.0;
s[6],hum=70;
strcpy(s[7]。时间,“2014-02-13T15:00:00”);
温度=6;
s[7],hum=56;
strcpy(s[8]。时间,“2014-02-13T08:50:00”);
温度=4.0;
s[8],hum=87;
strcpy(s[9]。时间,“2014-02-13T21:50:00”);
s[9],温度=4.0;
s[9],hum=75;
strcpy(s[10]。时间,“2014-02-13T08:00:00”);
温度=3;
s[10],hum=88;
int i;
对于(i=0;i
2014-02-13T13:40:00获取
时间:2014021314000温度:6.666667嗡嗡声:67.333336
#include <stdio.h>
#include <stdlib.h>
struct metrhseis{
long long int time;
int temp;
int hum;
struct metrhseis *next;
};
long long int string_To_long(const char arr[]);
void interpolation_search(struct metrhseis *list, const char * in);
void add_metrhseis(struct metrhseis **list, const char *time, int temp, int hum);
void list_delete(struct metrhseis **list);
void list_print(struct metrhseis *list);
int main(){
char in[25];
struct metrhseis *list = NULL;
add_metrhseis(&list, "2014-02-13T06:20:00", 3.0, 93);
add_metrhseis(&list, "2014-02-13T13:50:00", 7.0, 66);
add_metrhseis(&list, "2014-02-13T06:00:00", 2, 91);
add_metrhseis(&list, "2014-02-13T03:00:00", 3, 84);
add_metrhseis(&list, "2014-02-13T13:00:00", 6, 62);
add_metrhseis(&list, "2014-02-13T18:50:00", 4.0, 75);
add_metrhseis(&list, "2014-02-13T13:20:00", 6.0, 70);
add_metrhseis(&list, "2014-02-13T15:00:00", 6, 56);
add_metrhseis(&list, "2014-02-13T08:50:00", 4.0, 87);
add_metrhseis(&list, "2014-02-13T21:50:00", 4.0, 75);
add_metrhseis(&list, "2014-02-13T08:00:00", 3, 88);
list_print(list);
printf("Date:");
scanf("%s",in);
interpolation_search(list, in);
list_delete(&list);
}
void list_print(struct metrhseis *m) {
printf("List\n");
do {
printf("%lld:%d,%d\n", m->time, m->temp, m->hum);
m = m->next;
} while (m);
}
void list_delete(struct metrhseis **list) {
struct metrhseis *m = *list;
if (m->next) {
list_delete(&m->next);
}
free(m);
*list = NULL;
}
void add_metrhseis(struct metrhseis **list, const char *time, int temp, int hum)
{
struct metrhseis *current = *list;
struct metrhseis *m = malloc(sizeof(struct metrhseis));
m->time = string_To_long(time);
m->temp = temp;
m->hum = hum;
if (*list == NULL || (*list)->time > m->time) {
m->next = *list;
*list = m;
return;
}
while (current->next && current->next->time <= m->time) {
current = current->next;
}
m->next = current->next;
current->next = m;
}
void interpolation_search(struct metrhseis *list, const char * in) {
long long int time = string_To_long(in);
float ratio;
if (time < list->time) {
printf("Time: %s Temperatura: %d Hum: %d\n", in, list->temp, list->hum);
return;
}
while(list->next && list->next->time < time) {
list = list->next;
}
if (!list->next) {
printf("Time: %s Temperatura: %d Hum: %d\n", in, list->temp, list->hum);
return;
}
ratio = (float)(time - list->time) / (list->next->time - list->time);
printf("Time: %s Temperatura: %f Hum: %f\n",
in,
list->temp + ratio * (list->next->temp - list->temp),
list->hum + ratio * (list->next->hum - list->hum )
);
return;
}
long long string_To_long(const char arr[]) {
long long int n = 0;
for (int i = 0; arr[i] != '\0'; i++) {
char c = arr[i];
if (c >= '0' && c <= '9')
n = n * 10 + (c - '0');
}
return n;
}
#包括
#包括
结构metrhseis{
长时间;
内部温度;
内哼;
结构metrhseis*next;
};
长整型字符串(const char arr[]);
void interpolation_search(struct metrhseis*list,const char*in);
void add_metrhseis(结构metrhseis**list,const char*time,int temp,int hum);
作废列表\删除(结构metrhseis**列表);
作废列表打印(结构metrhseis*列表);
int main(){
[25]中的char;
struct metrhseis*list=NULL;
增加城市环境影响报告(和清单,“2014-02-13T06:20:00”,3.0,93);
增加城市环境影响报告(和清单,“2014-02-13T13:50:00”,7.0,66);
增加城市环境影响报告(和清单,“2014-02-13T06:00:00”,291);
增加城市环境影响报告(和清单,“2014-02-13T03:00:00”,3,84);
添加城市环境影响报告(和列表,“2014-02-13T13:00:00”,6,62);
增加城市环境影响报告(和清单,“2014-02-13T18:50:00”,4.0,75);
增加城市环境影响报告(和清单,“2014-02-13T13:20:00”,6.0,70);
增加城市环境影响报告(和清单,“2014-02-13T15:00:00”,6,56);
增加城市环境影响报告(和清单,“2014-02-13T08:50:00”,4.0,87);
增加城市环境影响报告(和清单,“2014-02-13T21:50:00”,4.0,75);
增加城市环境影响报告(和清单,“2014-02-13T08:00:00”,3,88);
列表打印(列表);
printf(“日期:”);
扫描频率(“%s”,英寸);
插值搜索(列表,in);
列表\删除(&列表);
}
作废列表打印(结构metrhseis*m){
printf(“列表\n”);
做{
printf(“%lld:%d,%d\n”,m->time,m->temp,m->hum);
m=m->next;
}while(m);
}
作废列表\删除(结构metrhseis**列表){
结构metrhseis*m=*列表;
如果(m->next){
列表\删除(&m->下一步);
}
自由(m);
*列表=空;
}
void add_metrhseis(结构metrhseis**list,const char*time,int temp,int hum)
{
结构metrhseis*当前=*列表;
struct metrhseis*m=malloc(sizeof(struct metrhseis));
m->time=字符串长度(时间);
m->temp=温度;
m->hum=hum;
如果(*list==NULL | |(*list)->time>m->time){
m->next=*列表;
*列表=m;
返回;
}
同时(当前->下一次和当前->下一次->时间){
当前=当前->下一步;
}
m->next=当前->下一步;
当前->下一个=m;
}
无效插值搜索(结构metrhseis*列表,常量char*in){
long long int time=string_到_long(in);
浮动比率;
如果(时间<列表->时间){
printf(“时间:%s温度:%d嗡嗡声:%d\n”,在,列表->临时,列表->嗡嗡声);
返回;
}
while(列表->下一个&列表->下一个->时间<时间){
列表=列表->下一步;
}
如果(!列表->下一步){
printf(“时间:%s温度:%d嗡嗡声:%d\n”,在,列表->临时,列表->嗡嗡声);
返回;
}
比率=(浮动)(时间-列表->时间)/(列表->下一步->时间-列表->时间);
printf(“时间:%s温度:%f嗡嗡声:%f\n”,
在里面
列表->临时+比率*(列表->下一步->临时-列表->临时),
列表->哼哼+比率*(列表->下一步->哼哼-列表->哼哼)
);
返回;
}
长字符串到长字符串(const char arr[]){
长整型n=0;
对于(int i=0;arr[i]!='\0';i++){
char c=arr[i];
如果(c>='0'&&c似乎对我有效,只需在printf@Ôrel上加上\n
,结果在所有情况下都是一样的,因为mid始终为零在除法之前做乘法,你的计算是用int完成的,这就是我认为在做插值之前应该对数据进行排序的问题
#include <stdio.h>
#include <stdlib.h>
struct metrhseis{
long long int time;
int temp;
int hum;
struct metrhseis *next;
};
long long int string_To_long(const char arr[]);
void interpolation_search(struct metrhseis *list, const char * in);
void add_metrhseis(struct metrhseis **list, const char *time, int temp, int hum);
void list_delete(struct metrhseis **list);
void list_print(struct metrhseis *list);
int main(){
char in[25];
struct metrhseis *list = NULL;
add_metrhseis(&list, "2014-02-13T06:20:00", 3.0, 93);
add_metrhseis(&list, "2014-02-13T13:50:00", 7.0, 66);
add_metrhseis(&list, "2014-02-13T06:00:00", 2, 91);
add_metrhseis(&list, "2014-02-13T03:00:00", 3, 84);
add_metrhseis(&list, "2014-02-13T13:00:00", 6, 62);
add_metrhseis(&list, "2014-02-13T18:50:00", 4.0, 75);
add_metrhseis(&list, "2014-02-13T13:20:00", 6.0, 70);
add_metrhseis(&list, "2014-02-13T15:00:00", 6, 56);
add_metrhseis(&list, "2014-02-13T08:50:00", 4.0, 87);
add_metrhseis(&list, "2014-02-13T21:50:00", 4.0, 75);
add_metrhseis(&list, "2014-02-13T08:00:00", 3, 88);
list_print(list);
printf("Date:");
scanf("%s",in);
interpolation_search(list, in);
list_delete(&list);
}
void list_print(struct metrhseis *m) {
printf("List\n");
do {
printf("%lld:%d,%d\n", m->time, m->temp, m->hum);
m = m->next;
} while (m);
}
void list_delete(struct metrhseis **list) {
struct metrhseis *m = *list;
if (m->next) {
list_delete(&m->next);
}
free(m);
*list = NULL;
}
void add_metrhseis(struct metrhseis **list, const char *time, int temp, int hum)
{
struct metrhseis *current = *list;
struct metrhseis *m = malloc(sizeof(struct metrhseis));
m->time = string_To_long(time);
m->temp = temp;
m->hum = hum;
if (*list == NULL || (*list)->time > m->time) {
m->next = *list;
*list = m;
return;
}
while (current->next && current->next->time <= m->time) {
current = current->next;
}
m->next = current->next;
current->next = m;
}
void interpolation_search(struct metrhseis *list, const char * in) {
long long int time = string_To_long(in);
float ratio;
if (time < list->time) {
printf("Time: %s Temperatura: %d Hum: %d\n", in, list->temp, list->hum);
return;
}
while(list->next && list->next->time < time) {
list = list->next;
}
if (!list->next) {
printf("Time: %s Temperatura: %d Hum: %d\n", in, list->temp, list->hum);
return;
}
ratio = (float)(time - list->time) / (list->next->time - list->time);
printf("Time: %s Temperatura: %f Hum: %f\n",
in,
list->temp + ratio * (list->next->temp - list->temp),
list->hum + ratio * (list->next->hum - list->hum )
);
return;
}
long long string_To_long(const char arr[]) {
long long int n = 0;
for (int i = 0; arr[i] != '\0'; i++) {
char c = arr[i];
if (c >= '0' && c <= '9')
n = n * 10 + (c - '0');
}
return n;
}