首页 > 其他分享 >字典查找对应输入的字符

字典查找对应输入的字符

时间:2024-08-29 20:51:52浏览次数:11  
标签:字符 include ret 查找 sqlite3 NULL buf pdb 字典

一、将文件放入到数据库

#include<stdio.h>
#include<sqlite3.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <string.h>
#include <unistd.h>
int main(int agrc,char *agrv[])
{
    FILE *fp;
    fp= fopen("./dict.txt","r");
    if(fp == NULL)
    {
        perror("fopen fail");
        return -1;
    }
    char buf[1024] = {0};
    sqlite3 *pdb;
    int ret = sqlite3_open("./stu.db",&pdb);
    if(ret != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_open fail : %s\n",sqlite3_errmsg(pdb));
        return -1;
    }
    char *sql = "create table if not exists class6(id INTEGER PRIMARY KEY AUTOINCREMENT,word TEXT,meaning TEXT);";
    ret = sqlite3_exec(pdb,sql,NULL,NULL,NULL);
    if(ret != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_open1 fail: %s\n",sqlite3_errmsg(pdb));
        sqlite3_close(pdb);
        return -1;
    }
    while(!feof(fp))
    {
        char *buf1[2];
        char buf2[1024] = {0};
        memset(buf,0,sizeof(buf));
        fgets(buf,sizeof(buf),fp);
        buf1[0] = strtok(buf," ");
        buf1[1]  = strtok(NULL,"\r");
        sprintf(buf2,"insert into class6 values(NULL,\"%s\",\"%s\")",buf1[0],buf1[1]);
        sql = buf2;
        ret = sqlite3_exec(pdb,sql,NULL,NULL,NULL);
        if(ret !=SQLITE_OK)
        {
            fprintf(stderr,"sqlite3_open2 fail : %s\n",sqlite3_errmsg(pdb));
            sqlite3_close(pdb);
            return -1;
        }

    }
sqlite3_close(pdb);
fclose(fp);
return 0;
}
二、查找数据库
#include<stdio.h>
#include<sqlite3.h>
#include<string.h>
char buf[100] = {0};
int callback(void *arg,int column_cnt,char **column_value,char **column_name)
{
    if(strcmp(column_value[0],buf) == 0)
    {
        printf("meaning = %s\n",column_value[1]);
    }
    return 0;
}
int main(int agrc,char *agrv[])
{
    sqlite3 *pdb;:
    int ret = sqlite3_open("./stu.db",&pdb);
    if(ret != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_open fail : %s\n",sqlite3_errmsg(pdb));
        return -1;
    }
    char *sql = "select word,meaning from class6;";
    fgets(buf,sizeof(buf),stdin);
    buf[strlen(buf) + 1] = '\0';
    ret = sqlite3_exec(pdb,sql,callback,NULL,NULL);
    if(ret != SQLITE_OK)
    {
        fprintf(stderr,"sqlite3_open1 fail: %s\n",sqlite3_errmsg(pdb));
        sqlite3_close(pdb);
        return -1;
   
    }
    sqlite3_close(pdb);
    return 0;
}
三、用到的函数
3.1、fgets()

fgets函数函数用来从stream所指文件中读入buf[size-1]个字符放入buf为起始地址的空间内;如果在未读满bufsize-1个字符之时,已读到一个换行符或一个EOF(文件结束标志),则结束本次读操作,读入的字符串中最后包含读到的换行符。并在结尾处加上“\0”组成一个字符串,存入“字符串指针”中。若函数调用成功,则返回存放字符串的首地址;若读到文件结尾处或调用失败时,则返回字符常量 NULL。或者已经读到size -1,这个时候注意,我们如果要读文件,读这个数据的时候,若已经放满了,则没有\0,会造出读的时候指针越界,因此在只读[sizeof - 1]。当他把一行读完,文件流指针,会自动指向下一个。

3.2、feof()

int feof(FILE *stream);

功能

检测流上的文件结束符

返回值

如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()清除

3.3、ferror()

int ferror(FILE *stream);

ferror(src)检查文件到底是否出错,注意,发生读的错误

文件流里面有flag 表示文件是否从错误

 四、查找过程中出现的错误

1、strlen()之后,得到的是有效字符的个数,那么如果我们想对\n去掉的话,那么必须是长度-1,因为我们数组是从0开始的。

标签:字符,include,ret,查找,sqlite3,NULL,buf,pdb,字典
From: https://blog.csdn.net/weixin_63722559/article/details/141687531

相关文章

  • 代码随想录算法训练营,29日 | 704. 二分查找,27. 移除元素,977.有序数组的平方,209.长度最
    数组基础文档讲解︰代码随想录(programmercarl.com)1.连续空间、相同类型元素2.元素只能覆盖3.二维数组的地址连续吗(C++连续,Java不连续)704.二分查找题目链接:704.二分查找文档讲解︰代码随想录(programmercarl.com)视频讲解︰二分查找日期:2024-08-29思路:第一反应是想到二分查......
  • 【C++二分查找】2271. 毯子覆盖的最多白色砖块数
    本文涉及的基础知识点C++二分查找LeetCode2271.毯子覆盖的最多白色砖块数给你一个二维整数数组tiles,其中tiles[i]=[li,ri],表示所有在li<=j<=ri之间的每个瓷砖位置j都被涂成了白色。同时给你一个整数carpetLen,表示可以放在任何位置的一块毯子的长度......
  • c++数组挑战-字符环
    题目描述:有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串 ABCEFAGADEGKABUVKLM 的首尾连在一起,构成一个环;字符串 MADJKLUVKL 的首尾连在一起,构成一个另一个环; UVKLMA 是这两个环的一个连续公共字符串。时间限制:1 s内存限......
  • 【408DS算法题】028基础-查找二叉树的最大值结点
    Index题目分析实现总结题目给定二叉树的根节点,找到二叉树中结点值最大的结点。分析实现对于查找二叉树中的最大值结点,在二叉树的遍历(DFS、层次遍历)的基础上进行修改可以轻松地达成这一目的。本文中选用的是相对直观的后序遍历,具体实现如下:BTNode*findMax(BTN......
  • Java中的数组用法(复制、替换、查找与排序)
    在Java编程中,数组是一种基础且强大的数据结构,用于存储一组相同类型的元素。本文将深入探讨数组在Java中的用法,并展示如何进行数组的复制与替换、查找以及排序。(这些了解与学习只需要一个IDEA就可以进行练习了 )##数组的声明与初始化在Java中,数组的声明和初始化非常直观。以......
  • C语言之字符串操作
    C语言之字符串操作C语言提供了丰富的字符串处理相关的库函数,这些函数基本上,都声明在头文件string.h当中,所以使用它们需要包含这个头文件。这里只介绍几种最基本的和最常用的,以及手动实现它们的方式。字符串长度strlenstrlen函数全名:string_length函数声明:size_tstrlen(c......
  • MySQL字符集和排序规则详解
    前言MySQL中,字符集和排序规则在处理文本数据时起着至关重要的作用,本文将详细介绍MySQL中的字符集和排序规则。简介字符集(CharacterSet):字符集定义了数据库中可以存储的字符的集合。在MySQL中,常见的字符集包括utf8、utf8mb4、latin1等。utf8mb4字符集是用于在MySQL中存......
  • Python创建字典与fromkeys的坑
    字典很重要字典dict是Python中很重要的一个数据类型,通过键值映射,能够很好的定位查找.Django,Flask这些Web框架在做前后端分离时,就是用字典传数据的,因为它和列表list配合起来,能够很好的与json格式的数据相互转化.用Flask+Echarts做数据可视化大屏,传的变量都是......
  • 代码随想录算法训练营第一天 | 数组part01:数组理论基础,704. 二分查找,27. 移除元素 97
    数组理论基础数组是存放在连续内存空间上的相同类型数据的集合数组徐璈注意的是:数组的下标都是从0开始的数组内存空间是的地址是连续的正因为舒适的内存空间是连续的,所以在删除和增添元素的时候,需要移动其他元素的地址。在c++中,vector的底层实现是array,严格来说,vector是容......
  • 1894. 二分查找左侧边界
     代码#include<bits/stdc++.h>usingnamespacestd;inta[110000],n,q;intzc(intx){ intl=1,r=n,mid; while(l<=r) { mid=(l+r)/2; if(x<a[mid])r=mid-1; elseif(x>a[mid])l=mid+1; elseif(x==a[mid])r=mid-1; } if(a[l]==x)return......