精华内容
下载资源
问答
  • 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐文本。 你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用...

    题目

    leetcode 68
    给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本。
    你应该使用“贪心算法”来放置给定的单词;也就是说,尽可能多地往每行中放置单词。必要时可用空格 ’ ’ 填充,使得每行恰好有 maxWidth 个字符。
    要求尽可能均匀分配单词间的空格数量。如果某一行单词间的空格不能均匀分配,则左侧放置的空格数要多于右侧的空格数。
    文本的最后一行应为左对齐,且单词之间不插入额外的空格。

    说明:
    单词是指由非空格字符组成的字符序列。
    每个单词的长度大于 0,小于等于 maxWidth。
    输入单词数组 words 至少包含一个单词。

    示例:
    输入:
    words = [“This”, “is”, “an”, “example”, “of”, “text”, “justification.”]
    maxWidth = 16
    输出:
    [
    “This is an”,
    “example of text”,
    "justification. "
    ]

    示例 2:
    输入:
    words = [“What”,“must”,“be”,“acknowledgment”,“shall”,“be”]
    maxWidth = 16
    输出:
    [
    “What must be”,
    "acknowledgment ",
    "shall be "
    ]
    解释: 注意最后一行的格式应为 "shall be " 而不是 “shall be”,
    因为最后一行应为左对齐,而不是左右两端对齐。
    第二行同样为左对齐,这是因为这行只包含一个单词。

    示例 3:
    输入:
    words = [“Science”,“is”,“what”,“we”,“understand”,“well”,“enough”,“to”,“explain”,
    “to”,“a”,“computer.”,“Art”,“is”,“everything”,“else”,“we”,“do”]
    maxWidth = 20
    输出:
    [
    “Science is what we”,
    “understand well”,
    “enough to explain to”,
    “a computer. Art is”,
    “everything else we”,
    "do "
    ]

    代码

    此题没什么技巧,就是细节。
    1.空间应该开maxWidth + 1;
    2.如果空格不能平均分配,应该左边空格数多余右边,并且左边也是均匀分配的

    char ** fullJustify(char ** words, int wordsSize, int maxWidth, int* returnSize){
        *returnSize = 0;
        char **res = (char **)malloc(sizeof(char *) * wordsSize);
        //每一行单词数;每行单词的总长度;空格数;words单词的起始位置
        int words_c = 0, words_len = 0, blank = 0, k = 0, check_len = 0, rescol = 0, flag = 0;
        int i;
        for (i = 0; i < wordsSize; i++) {
            int wlen = strlen(words[i]);
            check_len = words_len + words_c + wlen;
            if (check_len >= maxWidth) {
                if (check_len == maxWidth) {
                    words_c++;
                    words_len += wlen;
                } else {
                    i--;
                }
                if (i == wordsSize - 1) break;
                if (words_c == 1) {blank = maxWidth - words_len; flag = 0;}
                else {
                    blank = (maxWidth - words_len) / (words_c - 1);
                    flag = (maxWidth - words_len) % (words_c - 1);
                }
                res[*returnSize] = (char *)malloc(sizeof(char) * (maxWidth + 1));
                for (int j = k; j <= i; j++) {
                    int m = 0;
                    while (words[j][m] != '\0') {
                        res[*returnSize][rescol++] = words[j][m++];
                    }
                    m = 0;
                    while (rescol < maxWidth && m < blank) {res[*returnSize][rescol++] = ' '; m++;}
                    if (flag > 0) {res[*returnSize][rescol++] = ' '; flag--;}
                }
                res[*returnSize][maxWidth] = '\0';
                (*returnSize)++;
                words_c = 0;
                words_len = 0;
                k = i + 1;
                check_len = 0;
                rescol = 0;
            } else {
                words_c++;
                words_len += wlen;
            }
        }
        res[*returnSize] = (char *)malloc(sizeof(char) * (maxWidth + 1));
        while (words_c > 0) {
            int m = 0;
            while (words[k][m] != '\0') res[*returnSize][rescol++] = words[k][m++];
            res[*returnSize][rescol++] = ' ';
            k++;
            words_c--;
        }
        while (rescol < maxWidth) res[*returnSize][rescol++] = ' ';
        res[*returnSize][maxWidth] = '\0';
        (*returnSize)++;
        return res;
    }
    
    展开全文
  • 只需以对齐的形式一次显示一个字符的文本字符串。 3.注意标题行1234567890 ....将其作为检查结果的有用方法。 4.仅使用局部变量。 5.函数必须至少有一个字符串参数(也可能需要使用其他参数)。 6.注意光标的...
  • 能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档。实现文件复制的主要思路是:开辟一个缓冲区,不断从原文件中读取内容到缓冲区,每读取完一次就将缓冲区中的内容写入到新建...

    文件的复制是常用的功能,要求写一段代码,让用户输入要复制的文件以及新建的文件,然后对文件进行复制。能够复制的文件包括文本文件和二进制文件,你可以复制1G的电影,也可以复制1Byte的txt文档。

    实现文件复制的主要思路是:开辟一个缓冲区,不断从原文件中读取内容到缓冲区,每读取完一次就将缓冲区中的内容写入到新建的文件,直到把原文件的内容读取完。

    这里有两个关键的问题需要解决:
    (1)开辟多大的缓冲区合适?缓冲区过小会造成读写次数的增加,过大也不能明显提高效率。目前大部分磁盘的扇区都是4K对齐的,如果读写的数据不是4K的整数倍,就会跨扇区读取,降低效率,所以我们开辟4K的缓冲区。

    (2)缓冲区中的数据是没有结束标志的,如果缓冲区填充不满,如何确定写入的字节数?最好的办法就是每次读取都能返回读取到的字节数。

    fread() 的原型为:

    size_t fread (void *ptr, size_t size, size_t count, FILE *fp);

    它返回成功读写的块数,该值小于等于 count。如果我们让参数 size 等于1,那么返回的就是读取的字节数。

    注意:fopen()一定要以二进制的形式打开文件,不能以文本形式打开,否则系统会对文件进行一些处理,如果是文本文件,像.txt等,可能没有问题,但如果是其他格式的文件,像.mp4, .rmvb, .jpg等,复制后就会出错,无法读取。

    代码实现:

    #include <stdio.h>
    #include <stdlib.h>
    
    int copyFile(char *fileRead, char *fileWrite);
    
    int main()
    {
    	char fileRead[100];  // 要复制的文件名
    	char fileWrite[100];  // 复制后的文件名
    
    	// 获取用户输入
    	printf("要复制的文件:");
    	scanf("%s", fileRead);
    	printf("将文件复制到:");
    	scanf("%s", fileWrite);
    
    	// 进行复制操作
    	if( copyFile(fileRead, fileWrite) ){
    		printf("恭喜你,文件复制成功!\n");
    	}else{
    		printf("文件复制失败!\n");
    	}
    
    	return 0;
    }
    
    /**
    * 文件复制函数
    * @param fileRead 要复制的文件
    * @param fileWrite 复制后文件的保存路径
    * @return int 1: 复制成功;2: 复制失败
    **/
    int copyFile(char *fileRead, char *fileWrite)
    {
    	FILE *fpRead;  // 指向要复制的文件
    	FILE *fpWrite;  // 指向复制后的文件
    	int bufferLen = 1024*4;  // 缓冲区长度
    	char *buffer = (char*)malloc(bufferLen);  // 开辟缓存
    	int readCount;  // 实际读取的字节数
    
    	if( (fpRead=fopen(fileRead, "rb")) == NULL || (fpWrite=fopen(fileWrite, "wb")) == NULL ){
    		printf("Cannot open file, press any key to exit!\n");
    		getch();
    		exit(1);
    	}
    
    	// 不断从fileRead读取内容,放在缓冲区,再将缓冲区的内容写入fileWrite
    	while( (readCount=fread(buffer, 1, bufferLen, fpRead)) > 0 ){
    		fwrite(buffer, readCount, 1, fpWrite);
    	}
    
    	free(buffer);
    	fclose(fpRead);
    	fclose(fpWrite);
    
    	return 1;
    }

    运行结果:

    要复制的文件:d://1.mp4
    将文件复制到:d://2.mp4
    恭喜你,文件复制成功!

    如果文件不存在,会给出提示,并终止程序:

    要复制的文件:d://123.mp4
    将文件复制到:d://333.mp4
    d://cyuyan.txt: No such file or directory

    通过fread()函数,每次从 fileRead 文件中读取 bufferLen 个字节,放到缓冲区,再通过fwrite()函数将缓冲区的内容写入fileWrite文件。

    正常情况下,每次会读取bufferLen个字节,即readCount=bufferLen;如果文件大小不足bufferLen个字节,或者读取到文件末尾,实际读取到的字节就会小于bufferLen,即readCount<bufferLen。所以通过fwrite()写入文件时,应该以readCount为准。

    展开全文
  • C语言编程要点

    2017-09-18 00:10:37
    6.4. 怎样使字符串右对齐? 97 6.5. 怎样将字符串打印成指定长度? 99 6.6. 怎样拷贝字符串的一部分? 100 6.7. 怎样将数字转换为字符串? 101 6.8. 怎样将字符串转换为数字? 103 6.9. 怎样打印字符串的一部分? 104 6.10...
  • C语言小知识

    2019-01-15 16:41:20
    1) “-”指的是向左对齐,同理一般默认不加 “-”的情况下是向右对齐 2) “*” 这个例子上对应的是 10, 表示的是字符串总共占10个字符位 相当于:printf(“%10s\n”); 具体“*”也可以用在Scan上,如: ...

    一:
    例:

    	**fprintf(d_fp ,"%-*s %s\n", 10, buf , strTime); //格式化输出文本文件**
    

    解析:

    1)	“-”指的是向左对齐,同理一般默认不加 “-”的情况下是向右对齐
    2)	“*” 这个例子上对应的是 10, 表示的是字符串总共占10个字符位
    		相当于:printf(“%10s\n”); 
    		具体“*”也可以用在Scan上,如: scanf("%d%*s",a,b,buf);
    		表示的是读取多少个空格后就将buf字符串靠右对齐一共b个字符。
    

    二:
    例:
    fscan(stdin,“%[^\n]”,buf);
    while(getchar() != ‘\n’);

    解析:

    这是个组合使用的预计,读取标准输入的数据到buf中,直到检测到换行符才结束。
    [^\n]的意思是读取除'\n'的buf中,最后getchar()是把缓冲区里的一个‘\n’读出来判断
    并刷新缓冲区。
    
    展开全文
  • C语言讲义.doc

    2018-01-27 10:41:43
    5.2 二进制和文本模式的区别 77 5.3 FCLOSE 78 5.4 GETC和PUTC函数 78 5.5 EOF与FEOF函数文件结尾 78 5.6 FPRINTF,FSCANF,FGETS,FPUTS函数 78 5.7 STAT函数 78 5.8 FREAD和FWRITE函数 79 5.9 FREAD与FEOF 79 5.10 ...
  • C语言文件操作

    2016-01-29 20:41:00
    配置unix采用文本 Windows采用注册表二进制文件2>媒体数据存档在二进制文件中 还有很多用处 首先以标准的输入输出谈起~ (1)格式输入输出 printf("%[flag][width][.prec][hlL]type"); 1> flag ...

     程序为什么需要文件?
    1>配置
    unix采用文本 Windows采用注册表二进制文件
    2>媒体数据
    存档在二进制文件中

    还有很多用处


    首先以标准的输入输出谈起~ 

    (1)格式输入输出

    printf("%[flag][width][.prec][hlL]type");
    

    1>

    flag 含义
    - 左对齐
    + 允许显示正号
    0 0填充

    举例:

    int main(){
      a = 123;   printf("-9%d",a);   printf("+9%d",a);   a = 123;   printf("+9%d",a);   printf("9%d",a);
      return 0;
    }

    屏幕上打印为

    --------------------------
    123
    +123
    -123
    -123
    --------------------------
    2>

    width或prec               含义
    number               最小字符数
    *                  下一个参数是字符数
    .number          小数点后保留几位
    .*            下一个参数是小数点后的位数
    举例:
    a = 123.4512;
    printf("9.2%d",a);
    printf("",a);
    //9代表至少有九个字符,2后面保留的小数数位
    屏幕上打印为
    --------------------------
    123.45

    --------------------------

    3>hlL修饰符
    hh 单个字节
    h short
    l long
    ll long long
    L long double

    4>type
    显示类型
    %d 整数类型
    %f float
    %o 八进制
    %x 十六进制
    e 指数
    n 输入输出的个数
    例如
    printf("%nd",1234,&num) //num储存了输出的个数,在这个例子中是4
    hh char
    h short
    l long double


    (2)文件的操作

    1>文件的打开与创建

    用到fopen函数,先看一个例子

    FILE *fp = fopen("12.in","r");
    if(fp)
    {	
        fscanf(fp,"%d",&num);
        fclose(fp);
    }
    else
    {
        //文件打开是失败
    }
    

     

    FILE *fopen(char *pname,char *mode)

    上述为函数原型,入口参数如下所示

    pname:是一个字符指针,它将指向要打开或建立的文件的文件名字符串。
    mode:是一个指向文件处理方式字符串的字符指针。所有可能的文件处理方式如下所示

    ----------------------------------

    r 打开只读
    r+ 打开读写,从文件开头开始
    w 打开只写,文件不存在则新建,如果存在则清空
    w+ 打开读写,文件不存在则新建,如果存在则清空
    a 打开追加
    ..x 只新建,如果已经存在则无法打开

    ----------------------------------

    返回值为状态:
    正常返回:被打开文件的文件指针。
    异常返回:NULL,表示打开操作不成功。

    总结一下

    打开文件的作用是:
    (1)分配给打开文件一个FILE 类型的文件结构体变量,并将有关信息填入文件结构体变量;
    (2)开辟一个缓冲区;
    (3)调用操作系统提供的打开文件或建立新文件功能,打开或建立指定文件;

     2>文件的关闭

    文件的关闭简单,就是利用fclose函数

    int fclose(FILE *fp);

    入口参数为文件指针,返回值为状态(正常为0,错误为EOF)

    3>文件的读写操作

    文件的读写有多种函数。

    举一个例子,格式化读写。

    格式化写

    1.函数原型

    int fprintf(FILE *fp,char *format,arg_list)

    2.功能说明
      将变量表列(arg_list)中的数据,按照format指出的格式,写入由fp指定的文件。fprintf()函数与printf()函数的功能相同,只是printf()函数是将数据写入屏幕文件(stdout)。
    3.入口参数说明
      fp:这是个文件指针,指出要将数据写入的文件。
      format:这是个指向字符串的字符指针,字符串中含有要写出数据的格式,所以该字符串成为格式串。格式串描述的规则与printf()函数中的格式串相同。
      arg_list:是要写入文件的变量表列,各变量之间用逗号分隔。

    void main()
    {
        char name[10];
        int nAge,nClass;
        long number;
        FILE *fp;
        if((fp=fopen("student.txt","w"))==NULL)
        {
            printf("The file %s can not be opened.\n","student.txt");
            return;
        }
        fscanf(stdin,"%s %d %d %ld",name,&nClass,&nAge,&number);
        fprintf(fp,"%s %5d %4d %8ld",name,nClass,nAge,number);
        fclose(fp);
        if((fp=fopen("student.txt","r"))==NULL)
        {
            printf("The file %s can not be opened.\n","student.txt");
            return;
        }
        fscanf(fp,"%s %d %d %ld",name,&nClass,&nAge,&number);
        printf("name nClass nAge number\n");
        fprintf(stdout,"%-10s%-8d%-6d%-8ld\n",name,nClass,nAge,number);
        fclose(fp);
    }

     

    下面一篇文章对文件读写做出详细说明http://www.cnblogs.com/likebeta/archive/2012/06/16/2551780.html

     

    转载于:https://www.cnblogs.com/flyingjun/p/5167512.html

    展开全文
  • C语言之printf函数

    2019-04-05 22:09:45
    printf() : 格式化输出,即按照某种特定格式输出特定为本基本用法(输出普通文本):printf("文本"); 输出变量:printf("普通文本%变量类型",变量);指定为宽(即指定输出文本占位列数):格式一:printf("普通...0时,右对齐;m...
  • Python小白 Leetcode刷题历程 No.66-No.70 加一、二进制求和、文本左右对齐、x的平方根、爬楼梯 写在前面: 作为一个计算机院的大学生,总觉得仅仅在学校粗略的学习计算机专业课是不够的,尤其是假期大量的空档期,...
  • C语言及VS快捷键

    2020-11-22 21:47:47
    注释与反注释: Ctrl + K + C注释代码块 Ctrl + K + U取消注释代码块 代码格式有些乱: 1、使用Ctrl + A将代码全选后,再按Alt + F8可以调整到标准格式;...3、在VS2008中,选定代码后,按Ctrl+K+F组合键...文本...
  • 2.文本对齐方式:text-align:left/center/right/justify;left:左对齐center:居中对齐reght:右对齐justify:两端对齐3.文本修饰:text-decoration:none/overline/underline/line-through;none:空ov...
  • C语言文件books.c

    2020-04-13 20:44:42
    首先,图书管理系统对已有的书(原始书库,存放在一个文本文件中)按书名字典序进行(按书名中各字符的ASCII码值由小到大排序)摆放(即将原始无序的图书信息文件生成一个有序的文件,即新书库),以便查找。...
  •  制表符(也叫制表位)的功能是在不使用表格的情况下在垂直方向按列对齐文本。 比较常见的应用包括名单、简单列表等。也可以应用于制作页眉页脚等同一行有几个对齐位置的行。  至于制表符这一概念的由来,暂时...
  • C语言的科学和艺术.pdf

    热门讨论 2012-01-19 14:09:05
    3.5.2 控制空格、对齐方式和精度 63 3.6 构思一个程序 65 3.6.1 程序设计风格 66 3.6.2 设计时考虑将来的修改 67 3.6.3 #define机制 67 小结 69 复习题 69 程序设计练习 70 第4章 语句形式 74 4.1 简单语句...
  • 你必须知道的495个C语言问题

    千次下载 热门讨论 2015-05-08 11:09:25
    1.3 因为C语言没有精确定义类型的大小,所以我一般都用typedef定义int16和int32。然后根据实际的机器环境把它们定义为int、short、long等类型。这样看来,所有的问题都解决了,是吗? 1.4 新的64位机上的64位类型...
  • HTML标签示例
  • 难道在C语言中一个结构不能包含指向自己的指针吗? o 2.7 怎样建立和理解非常复杂的声明?例如定义一个包含 N 个指向返回指向字符的指针的函数的指针的数组? o 2.8 函数只定义了一次, 调用了一次, 但编译器提示...
  • 一、 编辑框控件的窗口类名是edit。除了子窗口常用的风格 WS_CHILD、WS_VISIBLE、WS_BORDER 外,edit 控件也有自己的风格,都是以ES开头。 ...当输入文字超出横向显示范围时自动滚动(一般必选...文本居中对齐。 ...
  • FILE结构体(C语言版)

    2010-08-18 15:09:00
    用VC 控制台程序实现Word 的排版功能,输入文件名读取小于64k 的英文文本, 然后对英文文本进行匀齐排版,最后结果为:一行70个字符,左右两边分别空 4 个字符,长单词不能折断,每行必须对齐,单词...
  • FILE结构体(C语言版)

    千次阅读 2009-04-02 11:18:00
    用VC 控制台程序实现Word 的排版功能,输入文件名读取小于64k 的英文文本,然后对英文文本进行匀齐排版,最后结果为:一行70个字符,左右两边分别空4 个字符,长单词不能折断,每行必须对齐,单词中间插入空格。...
  • [转]BM算法详解及C语言实现

    千次阅读 2010-06-28 22:04:00
    [转]BM算法详解及C语言实现 首先,先简单说明一下有关BM算法的一些基本概念。 BM算法是一种精确字符串匹配算法(区别于模糊匹配)。 BM算法采用从右向左比较 的方法,同时应用到了两种启发式规则,即坏字符规则 ...
  • 《你必须知道的495个C语言问题》

    热门讨论 2010-03-20 16:41:18
    《你必须知道的495个C语言问题》以问答的形式组织内容,讨论了学习或使用C语言的过程中经常遇到的一些问题。书中列出了C用户经常问的400多个经典问题,涵盖了初始化、数组、指针、字符串、内存分配、库函数、C预...
  •  14.1.3 文本流和二进制流 218  14.1.4 预定义的流 218  14.2 使用C语言的流函数 219  14.2.1 例子 219  14.3 读取键盘输入 220  14.3.1 字符输入 220  14.3.2 格式化输入 225  14.4 控制屏幕输出 ...
  • C语言大全第4版(高清PDF中文版)

    热门讨论 2011-06-07 09:23:56
    8.4.8 对齐输出 8.4.9 处理其他数据类型 8.4.10 修饰符*和# 8.5 scanf() 8.5.1 格式说明符 8.5.2 输入数值 8.5.3 输入无符号整数 8.5.4 用scanf()读单字符 8.5.5 用scanf()读串 8.5.6 ...
  • 输入文件名读取小于64k 的英文文本,然后对英文文本进行匀齐排版,最后结果为:一行70个字符,左右两边分别空4 个字符,长单词不能折断,每行必须对齐,单词中间插入空格。均匀插入。注意:1、不能用STL库,

空空如也

空空如也

1 2 3 4
收藏数 79
精华内容 31
关键字:

c语言文本对齐

c语言 订阅