#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<ctype.h>
#define Max_COLS 20
#if 0
宏定义,所能处理的最大列号
#endif
#define Max_INPUT 1000
#if 0
每次输入行的最大长度
#endif
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;
#if 0
进行处理的列标号
#endif
int columns[Max_COLS];
#if 0
需要处理的列数
#endif
char input[Max_INPUT];
#if 0
容纳输入行的数组
#endif
char output[Max_INPUT];
#if 0
容纳输出行的数组
#endif
n_columns=read_column_numbers(columns,Max_COLS);
#if 0
读取该串列标号
#endif
while (fgets(input,sizeof(input),stdin)!=NULL)
{
printf("Original input:%s\n",input);
#if 0
输出原来数据
#endif
rearrange(output,input,n_columns,columns);
#if 0
调用函数rearrange
#endif
printf("Rearrange line:%s\n",output);
#if 0
输出提取之后的数据
#endif
}
return EXIT_SUCCESS;
#if 0
在函数库中已经通过宏替换,等价于:return 0;
#endif
}
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 columns 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 nchars;
int col;
int output_col;
int len;
len=strlen(input);
#if 0
strlen比较字符串长度,返回值是字符串的长度*/
#endif
output_col=0;
for(col=0;col<n_columns;col+=2){
nchars=columns[col+1]-columns[col]+1;
#if 0
这段代码用于计算列距离计算
#endif
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);
#if 0
strncpy与strcpy都是复制功能,但strncpy返回的是dest地址*/
#endif
output_col+=nchars;
output[output_col]='\0';
}
}
从标准输入行读取,然后提取数据打印
于 2024-06-11 10:47:05 首次发布