文件查找源码(linux环境下)

来源:互联网 发布:精华乳和精华液 知乎 编辑:程序博客网 时间:2024/06/11 20:09
1、实现的功能是:在linux下,建立一个文件,在文件中能够输入一个字符串。在字符串的最大值内,如果换行处为数据,则追溯到离他最近的空格处换行。

#include<stdio.h>
#include<string.h>
#define MAX 15
#define FMAX 20
FILE *make_file()
{
    FILE *fs;
    printf("putin the file's name:");
    char *fname = (char *)malloc(FMAX);
    memset(fname,0,FMAX);
    char addr[256] = "/caigaojian/data_structure/";
    gets(fname);
    strcat(addr,fname);
    fs = fopen(addr,"w+");
    return fs;
}

void putin(FILE *fs)
{
    printf("putin data:");
    char *buf = (char *)malloc(MAX*10);
    memset(buf,0,MAX);
    gets(buf);
    int size = strlen(buf);
    int sum;
    while(size > MAX)
    {
        sum = MAX;    
        while((*(buf + sum) != ' ') && (*(buf + sum-1) != ' ') && (sum >= 0)) 
            sum --;
        fwrite(buf,1,sum,fs);
        size = size - sum;
        if(*(buf + sum) == ' ')
        {
            strncpy(buf, buf+sum+1, --size);
            fwrite("\n\r",1,1,fs);
        }
        else
        {
            strncpy(buf, buf+sum, size);
            fwrite("\n\r",1,1,fs);
        }
    }    
    if(fwrite(buf,1,size,fs) == size)
        printf("write OK");
    free(buf);
}

int main()
{
    FILE *fs = make_file();
    putin(fs);
    fclose(fs);
    return 0;
}

2.增加查找功能

#include<stdio.h>
#include<string.h>
#define MAX 15
#define FMAX 20

//*****************************************
#define WORD_SIZE 20
char *WORD;
char addr[256] = "/caigaojian/data_structure/";
//*****************************************
FILE *make_file()
{
    FILE *fs;
    printf("putin the file's name:");
    char *fname = (char *)malloc(FMAX);
    memset(fname,0,FMAX);

    gets(fname);
    strcat(addr,fname);
    fs = fopen(addr,"w+");
    return fs;
}

void putin(FILE *fs)
{
    printf("putin data:");
    char *buf = (char *)malloc(MAX*10);
    memset(buf,0,MAX);
    gets(buf);
    int size = strlen(buf);
    int sum;
    while(size > MAX)
    {
        sum = MAX;    
        while((*(buf + sum) != ' ') && (*(buf + sum-1) != ' ') && (sum >= 0)) 
            sum --;
        fwrite(buf,1,sum,fs);
        size = size - sum;
        if(*(buf + sum) == ' ')
        {
            strncpy(buf, buf+sum+1, --size);
            fwrite("\n\r",1,1,fs);
        }
        else
        {
            strncpy(buf, buf+sum, size);
            fwrite("\n\r",1,1,fs);
        }
    }    
    if(fwrite(buf,1,size,fs) == size)
        printf("write OK");
    free(buf);
    fclose(fs);
}
//************************************************************************************************************
void word()
{
    printf("\nplease putin the word:");
    WORD = malloc(WORD_SIZE);
    memset(WORD,0,WORD_SIZE);
    gets(WORD);
    int word_size = 0;
    word_size = strlen(WORD);

    FILE* fs = fopen(addr,"r");
    int row[MAX]={0},column[MAX]={0};
    char str[MAX] = {0};
    fread(str, 1, MAX, fs);
    int row_size = strlen(str);

    int i = 0,j = 0,k = 0;
    while((str[i+j] != '\0') )//&& (word[j] != '\0'))
    {
        if(str[i+j] == *(WORD+j))
        {
            j++;
        }
        else
        {
            j = 0;
            i ++;
        }
        if(*(WORD+j) == '\0')
        {
            row[k] = i;//the addresss in i rows 
            k++;//means already have one
        }
    }

    printf("\n\r%d times,they are ",k);
    for(i = 0;i<k;i++)
        printf("%d  ",row[i]+1);
    printf("\n\r");
}
//************************************************************************************************************
int main()
{

    FILE *fs = make_file();
    putin(fs);
//*************************************************
    word();
//*************************************************

    return 0;
}
0 0
原创粉丝点击