myfile.cpp:
#include<stdio.h>//包含文件头
#include<stdlib.h>
#include<string.h>
#include"myfile.h"
#define MAX_COLS 20 //所能处理的最大列号
#define MAX_INPUT 1000 //每个数入行的最大长度
int main()
{
int n_columns;
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("截取前: %s\n",input);
rearrange(output,input,n_columns,columns);
printf("截取后: %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("请输入偶数个数字最后再以负数结尾.");
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';
}
myfile.h:
int read_column_numbers(int columns[],int max);
void rearrange(char *output,char const *input,int n_columns,int const columns[]);