• 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
    ", input);
    		rearrange(output, input, n_columns, columns);
    		printf("rearrage Output: %s
    ", 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 != '
    '){
    		;
    	}
    
    	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] = '';
    }
    

      注意事项:

    1.scanf函数标量参数前加&符号.

    2.函数标量参数是传值得方式进行传递,数组名参数具有传地址调用的语义。

    3.没有字符串类型,字符串是以NUL字节结尾的字符。

    4.符号NULL在stdio.h中定义,NUL并未定义,如需使用需自定义NUL为 ‘‘。

    5.用int类型读取char类型,因为char是小int类型,EOF为int类型。

  • 相关阅读:

    类(重要的很)
    异常
    异常
    面向对象oop接口
    面向对象oop多态
    Day10_数组(下)
    Day09_数组(上)
    Day08_网络编程(上)
    Day07_java对象下
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/5759169.html
Copyright © 2020-2023  润新知