0
点赞
收藏
分享

微信扫一扫

《C和指针》读书笔记(一)

#include
<stdio.h>

#include
<stdlib.h>

#include
<string.h>

#define
MAX_COLS
20

#define
MAX_INPUT
1000

//函数原型

int
read_column_numbers(
int
columns[],
int
max);

//在其它语言中,这种无返回值的函数叫做过程

void
rearrange(
char
* output,
char
const
* input

,
int
n_columns,
int
const
columns[]);



int
main(
void
)

{


int
n_columns;


int
columns[
MAX_COLS
];


char
input[
MAX_INPUT
];


char
output[
MAX_INPUT
];


//读取该串列标号

n_columns = read_column_numbers(columns,
MAX_COLS
);
//C语言中,数组以引用形式进行传递


//读取,处理和打印剩余的输入行


while
(gets(input) !=
NULL
)
//gets读取一行,丢弃换行符

{

printf(
"Original input:%s\n"
, input);

rearrange(output, input, n_columns, columns);

printf(
"Rearranged lined:%s\n"
, output);

}


//字符串是一串以NUL结尾的字符 NUL是‘\0'


//%d ->以十进制打印 %o ->八进制 %x->十六进制 %g->浮点数 %c->打印字符 %s->打印字符串


return
EXIT_SUCCESS
;

system(
"pause"
);


return
0;

}



//读取类标号,如果超过规定范围则不予理会

int
read_column_numbers(
int
columns
[],
int
max
)

{


int
num = 0;


int
ch;


//读取列标号,如果读取的数小于0则停止


//1.num<max防止溢出 2.columns[num] >= 0 防止输入出现负值


//&& 逻辑与 也有人叫做短路与


//scanf("%d", &columns[num]) == 1 scanf每次从标准输入读取一个值,如果转换失败,返回0,成功返回1


while
(num <
max
&&scanf(
"%d"
, &
columns
[num]) == 1

&&
columns
[num] >= 0)

num += 1;




//确定已经读取的行号为偶数个,因为他们是以成对的形式出现的


if
(num % 2 != 0)

{

puts(
"Last column number is not paired."
);
//输出一行

exit(
EXIT_FAILURE
);

}




//丢弃该行中包含最后一个数字的那部分内容


//EOF是一个整形值


while
((ch = getchar()) !=
EOF
&&ch !=
'\n'
)

;


return
num;







}





void
rearrange(
char
*
output
,
char
const
*
intput
,


int
n_columns
,
int
const
columns
[])

{


int
col;


int
output_col;


int
len;

len = strlen(
intput
);

output_col = 0;




//处理每队列标号


for
(col = 0; col <
n_columns
; col += 2)

{


int
nchars =
columns
[col + 1] -
columns
[col] + 1;


//如果输入行结束或输出行数组已满,就结束任务


if
(
columns
[col] >= len ||

output_col ==
MAX_INPUT
- 1)


break
;




//如果输出行数据空间不足,支付至可以容纳的数据


if
(output_col + nchars>
MAX_INPUT
- 1)

{

nchars =
MAX_INPUT
- output_col - 1;

}




//复制相关的数据


//strncpy第一个参数:目标字符串 第二个:源目标串 第三个 复制的字符数

strncpy(
output
+ output_col,
intput
+
columns
[col],

nchars);

output_col += nchars;

}


output
[output_col] =
'\0'
;

}





//scanf()函数需要注意的地方

//1.标量参数前加&

//strcpy 和strcat 1.第一个参数不能使字符串常量 因为字符串常量不能改变 2.需要注意目标字符串要有足够的空间

//否则会出现问题

//strchr 在字符串中进行搜索 第一个参数:字符串 第二个:字符 返回第一次出现的位置

举报

相关推荐

0 条评论