首页 > 其他分享 >C语言文件操作及字符串学习记录

C语言文件操作及字符串学习记录

时间:2023-07-15 11:14:08浏览次数:36  
标签:str 记录 int C语言 char pf pragma 字符串 sizeof

#include <stdio.h>
#include <errno.h>
#include <string.h>
#include<stdlib.h>
#include<stddef.h>
 
//extern int errno;

#if  0

int countSpace(char* s){
    int i = 0;
    int count = 0;
    while(s[i] != '\0'){
        if(s[i] == ' '){
            count++;
        }
        i++;
    }
    return count;
}

char* replaceSpace(char* s,char* array){
    char *t = s;
    int count = countSpace(t);
    const int length = strlen(t) + count*2 + 1;
    array = (char*)malloc(length);
    int i, j = 0;
    for(i = 0,j = 0;i <= strlen(s);i++,j++){
        if(s[i] == ' '){
            array[j] = '%';
            array[j + 1] = '2';
            array[j + 2] = '0';
            j = j + 2;
        }
        else{
            array[j] = s[i];
        }
    }
    return array;
}
#endif

//char* callocateSpace(char*);

//char* searchStr(char*,char*);



struct person{
    char name[5];
    int age;
    double score;
};

//传入函数指针,完成函数回调
#pragma region 
void printAllArray(void *data,int length,int size,void(*printValue)(void*)){
    char *Arr = (char*)data;
    for(int i = 0;i < length;i++){
        char *record = Arr + size*i;
        printValue(record);
    }
}

void printfint(void *data){
    int *value = data;
    printf("%d\t",*value);
}

void printfchar(void *data){
    char *value = data;
    printf("%c\t",*value);
}

void printfdouble(void *data){
    double *value = data;
    printf("%f\t",*value);
}

void printfperson(void *data){
    struct person *p = (struct person*)data;
    printf("\n%s\t%d\t%f",p->name,p->age,p->score);
}
#pragma endregion

int main ()
{
   #pragma region    不同指针初始化为相同的常量字符串,在内存中只有一个字符串
    // char *p1 = "hello world!";
    // char *p2 = "hello world!";
    // char *p3 = "hello world!";
    // printf("%p   %p   %p",p1,p2,p3);
    #pragma endregion
    #pragma region    高地址对数据高位,小端对齐模式
    // int num = 0x11223344;
    // char *p1 = &num;
    // char *p2 = p1 + 1;
    // printf("%d   %d",*p1,*p2);
    #pragma endregion

    #pragma region    空指针作为参数传递,要用二级指针修饰
    // char *p = NULL;
    // p = callocateSpace(p);
    // printf("%s\n",p);
    // free(p);
    #pragma endregion

    #pragma region    以字符数组作为字符串时,要么加上结尾字符'\0',
    //要么指定字符数组大小,空出的位置会自动补零
    //否则就会造成字符串越界
    // char str[] = {'w','e',' ','c','a','n'};
    // char str1[] = {'a','s','d','g','h'};
    // char str2[] = {'w','e',' ','c','a','n'};
    // printf("%s      %s      %s\n",str,str1,str2);
    // printf("%p  %p  %p",str,str1,str2);

    // char str[] = {'w','e',' ','c','a','n'};
    // char str1[15] = {'a','s','d','g','h'};
    // char str2[] = {'w','e',' ','c','a','n','\0'};
    // printf("%s      %s      %s\n",str,str1,str2);
    // printf("%p  %p  %p",str,str1,str2);
    #pragma endregion

    #pragma region    输出结果  hello      12      5
    //"hello\012world"         \012  时转义换行符
    // char str[] = "hello\0world";  
    // printf("%s      %d      %d",str,sizeof(str),strlen(str));
    #pragma endregion


    int number[] = {2,5,7,9,12,6,42,91,56};
    char sign[] = {'w','d','h','u','e','t','\0'};
    double grade[] = {23.45,6.675,12.92,68.63,29.73};
    struct person group[3] = {
        {"韩信",28,89.43},
        {"李白",27,92.45},
        {"悟空",300,94.345}
    };

    //函数指针和回调函数  提高代码复用性
    #pragma region 
    printAllArray((void*)number,sizeof(number)/sizeof(int),sizeof(int),printfint);
    printAllArray((void*)sign,sizeof(sign)/sizeof(char),sizeof(char),printfchar);
    printAllArray((void*)grade,sizeof(grade)/sizeof(double),sizeof(double),printfdouble);
    printAllArray((void*)group,sizeof(group)/sizeof(struct person),sizeof(struct person),printfperson);
    #pragma endregion

   FILE * pf = NULL;
   int errnum;
   pf = fopen ("fileoperatewrite.txt", "a");
   if (pf == NULL)
   {
      errnum = errno;
      fprintf(stderr, "错误号: %d\n", errno);
      perror("通过 perror 输出错误");
      fprintf(stderr, "打开文件错误: %s\n", strerror( errnum ));
   }
   else
   {
      #pragma region 文件读取操作
      // int value = fgetc(pf);

      // char buf[255] = {0};
      // char *ch = fgets(buf,200,pf);

      // char buff[255] = {0};
      // int a = fscanf(pf, "%s", buff);

      // printf("%c\n  %s\n   %s\n",value,buf,buff);
      // fclose (pf);
      #pragma endregion

      #pragma region 文件写入操作
      // int returnvalue = fputc(47,pf);

      // char writevalue[255] = "sgfoeghneo wofghowfgowij oehgfjowehnow";
      // int result = fputs(writevalue,pf);

      // int re = fprintf(pf, "This is testing for fprintf...\n");
      #pragma endregion
   }
   return 0;
}


//动态分配内存
// char* callocateSpace(char* x)
// {
//     //动态分配的内存不会主动释放
//     x = (char*)malloc(sizeof(char)*64);
//     memset(x,0,64);
//     strcpy(x,"hello world!");
//     return x;
// }

//在源字符串中查找特定字串
#if 0
char* searchStr(char *scoure,char *dest){
    if(strlen(scoure) < strlen(dest)){
        return NULL;
    }
    int i;
    for(i = 0;i < strlen(scoure);i++){
        if(scoure[i] == dest[0]){
            int j;
            for(j = 1;j < strlen(dest)&&(i + j) < strlen(scoure);j++){
                if(scoure[i + j] != dest[j]){
                    break;
                }               
            }
            if(j == strlen(dest)){
                return scoure + i;
            }
            else if((i + j) == strlen(scoure)){
                return NULL;
            }
        }
    }
    return NULL;
}
#endif

#pragma region 获取文件行数
// int getFileLow(FILE *file){
//     char buf[1024];
//     int low = 0;
//     while(fgets(buf,1024,file) != NULL){
//         low++;
//     }
//     return low;
// }
#pragma endregion

标签:str,记录,int,C语言,char,pf,pragma,字符串,sizeof
From: https://www.cnblogs.com/x47083/p/17555815.html

相关文章

  • leetcode刷题记录Java
    难度等级:简单给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合并后的字符串。classSolution{publicStringmergeAlternately(Stringword1,St......
  • leetcode刷题记录(C语言)
    给你两个字符串word1和word2。请你从word1开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。返回合并后的字符串。输入:word1="abc",word2="pqr"输出:"apbqcr"解释:字符串合并情况如下所示:word1:a......
  • mysql使用记录
    mysql一些实际使用记录查看数据库showdatabases;选择某个数据库usexxxxx;创建数据库createdatabasetestdb;选择某个数据库后,查看该数据库下有那些表showtables;查看当前正在使用的数据库selectdatabase();表数据库当中最基本的单元是表:table;表中每一个字......
  • 如何把 SAP ABAP 字符串变量的值下载成本地文件,以及文件路径 F4 Value Help 的实现方
    笔者这篇文章使用ABAP事物码SM59创建Destination来读取外网的数据,有朋友留言:请问,当前获取到的百度首页数据的类型是string保存在lv_html变量中,而在GUI_DOWNLOAD调用中,接收的入参数据类型是tableofx255,那么需要如何做转换处理呢?谢谢本文就专门来解答这个问题。我们的......
  • C语言 #ifdef 和 #if defined区别
    注意两者都有个define的作用,区别在于使用方式上。前者的通常用法是:\#ifdefXXX....\#else....\#endif只能在两者中选择是否有定义。对于后者,常用法是:\#ifdefinedxxx1....\#elifdefinedxxx2....\#elifdefinedxxx3....\#endif......
  • 由此开始的记录
    从现在开始做的题就往这里放放了,写不写题解,随缘。这篇博客名来自Charlotte大结局的名字。\(\text{CF149DColoringBrackets}\)/*直接区间dp,经典的,显然f[l][r]表示[l,r]的涂色方案。f[l][r]没法转移,因为不会判相邻颜色是否相同。那么记一下两端颜色,因为你r+1不可......
  • 29.如何将字符串转化为数字,例如12.3b
    29.如何将字符串转化为数字,例如'12.3b'?(1)使用Number()方法,前提是所包含的字符串不包含不合法字符。(2)使用parseInt()方法,parseInt()函数可解析一个字符串,并返回一个整数。还可以设置要解析的数字的基数。当基数的值为0,或没有设置该参数时,parseInt()会根据string来判......
  • 字符串解码:给一个字符串,返回解码后的字符串。
    题目字符串解码,给一个字符串s,返回解码后的字符串。字符串编码规则为k[str]表示括号内部str字符串正好重复k次,k保证为整数,并且输入的字符串肯定符合这种编码规则不会有额外的空格。注意事项:注意括号可能发生嵌套,例如输入字符串为3[a2[c]]应该返回accaccacc1<=s.length<=30......
  • HJ29 字符串加解密
    1.题目读题HJ29 字符串加解密  考查点 2.解法思路 代码逻辑 具体实现 这道题目的解答思路是:首先,定义两个字符串,分别存储加密和解密的规则,例如"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"和"BCDEFGHIJKLMNOPQRSTUVWXYZAbcdefghijk......
  • 做题记录
    一些自己错的题目或者难题的相关记录,有些错的很不应该.7月质数是1*pr,而非1*pr*pr*pr...线段树要可以维护当前区间没有abc的最少操作(s[x]->c)structnode{intl,r;inta,b,c;//thenumsofthemintab,bc,abc;//删除需要的操作}t......