使用c语言的字符串

使用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

我尝试用结构中的数据进行插值搜索。例如,我将时间2014-02-13T18:50:00作为输入,我希望插值搜索返回temp 4.0和hum 75,但有些东西不起作用。 我认为用(高-低)*(低)计算中间值时会出现问题,但我不明白为什么会发生这种情况


#包括
#包括
#定义尺寸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;
}