|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COLS 20 /*定义 所能处理的最大列号*/
#define MAX_INPUT 1000 /*每个输入的最大长度*/
int read_column_numbers(int colunms[],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);
/*读取打印剩余的行内容*/
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;
/*读取列标号 如果读取的数字小于0则停止*/
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;
}
/*现在开始处理行的内容,将指定的字符连接在一起,输出行的内容是以NUL做结尾*/
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';
}
各位编译看看。。
|
|