#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;//进行处理的列标号//这是哪里要处理的列数如上表示Max_COLS 20
//是表示的最大列数哪么列标号是什么意思
int columns[MAX_COLS];//需要处理的列数// 同上所示
char input[MAX_INPUT];
char output[MAX_INPUT];
n_columns = read_column_numbers(columns, MAX_COLS);
while(gets( input ) != NULL)
{
printf("Original input : %s\n", input);
rearrange(output, input, n_columns, columns);
printf( "Rearranged line: %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 += 1;
if(num % 2 !=0)
{
puts("Last column number is 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 col;
int output_col;
int len;
len = strlen(input);
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(output + output_col,input + columns[col],nchars);
output_col += nchars;
}
output[output_col] = '\0';
}
//求解释本题整个指针和调用函数的解释过程c小白多多见谅,谢谢!