下定决心好好读一下,实现书里的全部代码
// ***************************************************************
// 1_1 version: 1.0 · date: 04/17/2008
// -------------------------------------------------------------
// the book solution:
// 写了一下只是想测一下关于指针和数组头元素的等价性
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 1_1 version: 1.0 · date: 04/17/2008
// -------------------------------------------------------------
// the book solution:
// 写了一下只是想测一下关于指针和数组头元素的等价性
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_COLS 20
#define MAX_INPUT 1000
#define MAX_INPUT 1000
int read_column_numbers(int *column,int max);
void rearrange(char *output , char const *input ,int n_columns,int const *columns);
void rearrange(char *output , char const *input ,int n_columns,int const *columns);
int main()
{
int n_columns;
int columns[MAX_COLS];
char input[MAX_INPUT];
char output[MAX_INPUT];
{
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("Original input : %s/n",input);
rearrange(output,input,n_columns,columns);
printf("Rearrange line: %s/n",output);
}
{
printf("Original input : %s/n",input);
rearrange(output,input,n_columns,columns);
printf("Rearrange line: %s/n",output);
}
return EXIT_SUCCESS;
}
}
int read_column_numbers(int *columns,int max)
{
int num=0;
int ch;
{
int num=0;
int ch;
while (num<max && scanf("%d",&columns[num])==1 && columns[num]>=0)
{
num+=1;
}
{
num+=1;
}
if (num%2 !=0)
{
puts("Last column number is not paired.");
exit(EXIT_FAILURE);
}
{
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;
{
int col;
int output_col;
int len;
len=strlen(input);
output_col=0;
output_col=0;
for (col=0;col<n_columns;col+=2)
{
int nchars = columns[col+1]-columns[col]+1;
{
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;
}
{
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';
}
}
/*
input:
input:
4 9 12 20 -1
abcdefghijklmnopqrstuvwxyz
Hello there, how are you?
I am fine, thanks.
See you!
Bye
Hello there, how are you?
I am fine, thanks.
See you!
Bye
*/
// ***************************************************************
// 1_1 version: 1.0 · date: 04/17/2008
// -------------------------------------------------------------
// my solution:
// 还是没有避免老习惯,用了全局变量省去了麻烦的参数传递
// 现在彻底的该习惯,我不再是在写快速代码
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
// 1_1 version: 1.0 · date: 04/17/2008
// -------------------------------------------------------------
// my solution:
// 还是没有避免老习惯,用了全局变量省去了麻烦的参数传递
// 现在彻底的该习惯,我不再是在写快速代码
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstring>
#include <cstdlib>
int pairs[20][2];
char source[1000];
char out[1000];
int n;
char source[1000];
char out[1000];
int n;
void run()
{
int len=strlen(source);
int out_index=0;
out[0]='/0';
for (int start=0;start<n;start++)
{
int ss=pairs[start][0];
int ee=pairs[start][1];
if(len>(ee-ss+1))
{
for (int j=0;j<ee-ss+1;j++)
{
out[out_index]=source[j+ss];
out_index++;
}
}
}
out[out_index]='/0';
}
{
int len=strlen(source);
int out_index=0;
out[0]='/0';
for (int start=0;start<n;start++)
{
int ss=pairs[start][0];
int ee=pairs[start][1];
if(len>(ee-ss+1))
{
for (int j=0;j<ee-ss+1;j++)
{
out[out_index]=source[j+ss];
out_index++;
}
}
}
out[out_index]='/0';
}
void print()
{
printf("%s/n",out);
}
{
printf("%s/n",out);
}
int main()
{
n=0;
while (1)
{
scanf("%d",&pairs[n][0]);
if (pairs[n][0]<0)
{
break;
}
scanf("%d",&pairs[n][1]);
n++;
}
getchar();
while (gets(source))
{
run();
print();
}
return 0;
}
{
n=0;
while (1)
{
scanf("%d",&pairs[n][0]);
if (pairs[n][0]<0)
{
break;
}
scanf("%d",&pairs[n][1]);
n++;
}
getchar();
while (gets(source))
{
run();
print();
}
return 0;
}
/
// ***************************************************************
// 1_1 version: 1.0 · date: 04/17/2008
// -------------------------------------------------------------
// my local parameters version :
//
// int mat[3][10];
// 这里多为数组作为参数传递在调用的时候可以:
// func(mat);
//
// 在函数生命时候可以:
// void func(int (*mat)[10]);
// void func(int mat[][10]);
//
//
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
// ***************************************************************
// 1_1 version: 1.0 · date: 04/17/2008
// -------------------------------------------------------------
// my local parameters version :
//
// int mat[3][10];
// 这里多为数组作为参数传递在调用的时候可以:
// func(mat);
//
// 在函数生命时候可以:
// void func(int (*mat)[10]);
// void func(int mat[][10]);
//
//
// -------------------------------------------------------------
// Copyright (C) 2008 - All Rights Reserved
// ***************************************************************
//
// ***************************************************************
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cstring>
#include <cstdlib>
void run(char *source,char *out,int n,int pairs[][2])
{
int len=strlen(source);
int out_index=0;
out[0]='/0';
for (int start=0;start<n;start++)
{
int ss=pairs[start][0];
int ee=pairs[start][1];
if(len>(ee-ss+1))
{
for (int j=0;j<ee-ss+1;j++)
{
out[out_index]=source[j+ss];
out_index++;
}
}
}
out[out_index]='/0';
}
{
int len=strlen(source);
int out_index=0;
out[0]='/0';
for (int start=0;start<n;start++)
{
int ss=pairs[start][0];
int ee=pairs[start][1];
if(len>(ee-ss+1))
{
for (int j=0;j<ee-ss+1;j++)
{
out[out_index]=source[j+ss];
out_index++;
}
}
}
out[out_index]='/0';
}
void print(char * out)
{
printf("%s/n",out);
}
{
printf("%s/n",out);
}
int main()
{
int pairs[20][2];
char source[1000];
char out[1000];
int n;
n=0;
while (1)
{
scanf("%d",&pairs[n][0]);
if (pairs[n][0]<0)
{
break;
}
scanf("%d",&pairs[n][1]);
n++;
}
getchar();
while (gets(source))
{
run(source,out,n,pairs);
print(out);
}
return 0;
}
{
int pairs[20][2];
char source[1000];
char out[1000];
int n;
n=0;
while (1)
{
scanf("%d",&pairs[n][0]);
if (pairs[n][0]<0)
{
break;
}
scanf("%d",&pairs[n][1]);
n++;
}
getchar();
while (gets(source))
{
run(source,out,n,pairs);
print(out);
}
return 0;
}