C和指针 第一章 字符串处理程序
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MAX_COL 20
#define MAX_INPUT 1000 int read_column_numbers(int columns[], int max);
void rearrange(char *output, char *input, int n_columns, int const columns[]); int main(void) { int n_columns;
int columns[MAX_COL];
char input[MAX_INPUT];
char output[MAX_INPUT]; n_columns = read_column_numbers(columns, MAX_COL); while (gets(input) != NULL) {
printf("Origin Input: %s\n", input);
rearrange(output, input, n_columns, columns);
printf("rearrage Output: %s\n", output);
} return EXIT_SUCCESS;
} /*
读取第一行格式数字格式
*/
int read_column_numbers(int columns[], int max)
{
int num = 0;
int ch; while (num < max && scanf("%d", &columns[num]) == 1 && columns[num] >= 0){
num++;
} if (num % 2 != 0){
puts("Last column number not paired.");
exit(EXIT_FAILURE);
} while ( (ch = getchar()) != EOF && ch != '\n'){
;
} return num;
} /*
对输入字符串进行格式化处理
*/
void rearrange(char *output, char const *input, int n_columns, int const columns[])
{
int output_col; /*输出数组计数器*/
int col; /*当前指向的输入字符数组的下标*/
int len; /*输入字符串的长度*/ len = strlen( input );
output_col = 0; for (col = 0; col < n_columns; col += 2) {
int nchars = columns[col + 1] - columns[col]; /*字符数量*/ //当达到最大长度或者字符串末尾时,停止循环
if (columns[col] > len || output_col == MAX_INPUT - 1) {
break;
} //当长度超过最大长度,截取前部分字符串
if (output_col + nchars > MAX_COL - 1) {
nchars = MAX_COL - output_col - 1;
} //拷贝字符串
strncpy(output + output_col, input + columns[col], nchars);
//偏移输出字符串
output_col += nchars; }
//字符串结束
output[output_col] = '\0';
}
注意事项:
1.scanf函数标量参数前加&符号.
2.函数标量参数是传值得方式进行传递,数组名参数具有传地址调用的语义。
3.没有字符串类型,字符串是以NUL字节结尾的字符。
4.符号NULL在stdio.h中定义,NUL并未定义,如需使用需自定义NUL为 ‘\0‘。
5.用int类型读取char类型,因为char是小int类型,EOF为int类型。
C和指针 第一章 字符串处理程序的更多相关文章
- C和指针 第九章 字符串 字符 字节
C语言中没有字符串类型,字符串是以NUL结尾的字符数组组成的. 高级字符串查找: //计算字符串起始部分,有多少字符是在group中 size_t strspn(char const * str, c ...
- 深入理解C指针第一章小结1
1.1 指针和内存,C程序在编译后,会以三种形式使用内存. (1) 静态/全局内存:在程序开始时分配,程序结束才消失,所有函数都能访问全局变量,static静态变量的作用域局限在定义它们的函数内部 ( ...
- Ruby学习-第一章
第一章 字符串,数字,类和对象 为了证明Ruby真的好用,hello world也能写的如此简洁: puts 'hello world' 1.输入/输出 print('Enter your name' ...
- C和指针 (pointers on C)——第一章:高速启动
大多数人并不认为有几类人猿学校计划非常赞同C学习好,然后看多本书. 仅仅作为读书笔记写.有时还包括一些题目和答案. 这样的公开栏,这两种玉引砖敲,对于自勉,鼓励王! 第一章:手 我每次都是复习的来写. ...
- 第一章、C#委托和事件(Delegate、Event、EventHandler、EventArgs)
第一章.C#委托和事件(Delegate.Event.EventHandler.EventArgs) 分类: 学习笔记-C#网络编程2012-12-08 14:10 7417人阅读 评论(3) 收藏 ...
- 第一章 Windows内核概述
第一章 Windows内核概述 这一章节描述了Windows内核知识中最重要的几个概念,这些话题在这本书之后会有更详细的描述,那些会与当前的主题密切相关.要确保你理解这个章节的概念,因为这些概念构成了 ...
- 第一章.C语言简介
C语言第一章 C语言简介 目录 一.C语言介绍 二.C语言特点 三.Hello World 四.转义符 五.占位符 六.俄罗斯方块游戏 七.文件下载 一.C语言介绍 C是一种通用的编程语言,广泛用 ...
- Windows程序设计(第五版)学习:第一章 起步
第一章 起步 1,windows主要的三个动态库: kernel32.dll负责操作系统的传统工作,包括内存管理.文件输入以及任务管理等. user32.dll负责用户界面的操作,即所有窗口的管理 g ...
- C#本质论读书笔记:第一章 C#概述|第二章 数据类型
第一章 1.字符串是不可变的:所有string类型的数据,都不可变,也可以说是不可修改的,不能修改变量最初引用的数据,只能对其重新赋值,让其指向内存中的一个新位置. 第二章 2.1 预定义类型或基本类 ...
随机推荐
- Beta Daily Scrum 第五天
[目录] 1.任务进度 2.困难及解决 3.燃尽图 4.代码check-in 5.总结 1. 任务进度 学号 今日完成 明日完成 612 完成分享成就到朋友圈,查看当天成就 我的任务完成啦 615 写 ...
- 数据结构与算法分析–Minimum Spanning Tree(最小生成树)
给定一个无向图,如果他的某个子图中,任意两个顶点都能互相连通并且是一棵树,那么这棵树就叫做生成树(spanning tree). 如果边上有权值,那么使得边权和最小的生成树叫做最小生成树(MST,Mi ...
- [NOIP2014] 解方程&加强版 (bzoj3751 & vijos1915)
大概有$O(m)$,$O(n\sqrt{nm})$,$O(n\sqrt{m})$的3个算法,其中后2个可以过加强版.代码是算法3,注意bzoj的数据卡掉了小于20000的质数. #include< ...
- IOS VFL屏幕自适应
-(void)fun1{ //注意使用VFL,不用设置视图的frame UIView *view = [[UIView alloc] init]; view.backgroundColor = [UI ...
- SQL Server编程(03)自定义存储过程
存储过程是一组预编译的SQL语句,它可以包含数据操纵语句.变量.逻辑控制语句等. 存储过程允许带参数: 输入参数:可以在调用时向存储过程传递参数,此类参数可用来向存储过程中传入值(可以有默认值) 输出 ...
- js003-基本概念
js003-基本概念 3.1 语法 3.1.1 区分大小写 ECMAScript中的一切(变量.函数名和操作符)都是区分大小写的,并且不能用关键字作为函数名:如 typeof. 3.1.2 标识符 所 ...
- Sublime Text3快捷键汇总
选择类 Ctrl+D 选中光标所占的文本,继续操作则会选中下一个相同的文本. Alt+F3 选中文本按下快捷键,即可一次性选择全部的相同文本进行同时编辑.举个栗子:快速选中并更改所有相同的变量名.函数 ...
- 9月5日网页基础知识 通用标签、属性(body属性、路径、格式控制) 通用标签(有序列表、无序列表、常用标签)(补)
网页基础知识 一.HTML语言 HTML语言翻译汉语为超文本标记语言. 二.网页的分类 1.静态页面:在静态页面中修改网页内容实际上就是修改网页原代码,不能从后台操作,数据来只能来源于原于代码.静态网 ...
- JVM 关闭钩子
1.功能 在jvm中添加关闭钩子(Runtime.getRuntime().addShutdownHook(shutdownHook);)后,当jvm关闭时会执行系统中已经设置的所有通过该方法添加的钩 ...
- codeforces 724B Batch Sort(暴力-列交换一次每行交换一次)
题目链接:http://codeforces.com/problemset/problem/724/B 题目大意: 给出N*M矩阵,对于该矩阵有两种操作: (保证,每行输入的数是 1-m 之间的数且不 ...