《c程序设计语言》的代码基本都实现了,很多没贴上来,懒得粘贴了。这是我第二次写博客,求大家顶我。写了非常多的函数,算是提高对c语言的了解吧,毕竟算法竞赛经常用到c/c++,不能吃了语言的亏。而且这本书对字符串处理什么的,真是基础啊,有很多教你怎么写代码格式的,非常棒,以前用了那么久c++都不知道可以这样写。
//file: test2.cpp
#include<stdio.h>main(){
char c;
// c = getchar();
// while(c!=EOF){
// putchar(c);
// c = getchar();
// }
//练习1-8 统计空白字符个数
// int nb = 0,nsp = 0,nt = 0;
// while((c=getchar())!=EOF){
// if(c=='\n')nb++;
// else if(c=='\t')nt++;
// else if(c==' ')nsp++;
// }
// printf("%d %d %d\n",nsp,nt,nb);
//练习1-9 单词间的多个空格缩减为一个
// char pre;
// while((c=getchar())!=EOF){
// if(c==' '&&pre==' ')continue;
// putchar(c);
// pre = c;
// }
// printf("%c\n",-127);
//练习1-10
while((c=getchar())!=EOF){
if(c=='\t')printf("\\t");
else putchar(c);
}
}
//test3.cpp
#include<stdio.h>
#define IN 0
#define OUT 1
//求幂函数,这里没有用快速幂实现
long long power(int m,int n){
long long res = 1;
while(n>0){
res = res*m;
--n;
}
return res;
}
main(){
//练习1-11 单词计数
// int c,state = OUT;
// int nc,nw,nl;
// nc = nw = nl = 0;
// while((c=getchar())!=EOF){
// ++nc;
// if(c=='\n')++nl;
// if(c==' '||c=='\t'||c=='\n'){
// state = OUT;
// }
// else{
// state = IN;
// ++nw;
// }
// }
// printf("%d %d %d\n",nl,nw,nc);
//
//练习1-12 每行只打印一个输入的单词
// while((c=getchar())!=EOF){
// ++nc;
// if(c=='\n')++nl;
// if(c==' '||c=='\t'||c=='\n'){
// if(state==IN){
// putchar('\n');
// }
// state = OUT;
// }
// else{
// state = IN;
// ++nw;
// putchar(c);
// }
// }
//幂函数测试
// int n,m;
// while(scanf("%d%d",&m,&n)==2){
// printf("%lld\n",power(m,n));
// }
}
//test4.cpp
#include<stdio.h>
//自制getline函数
int getline(char s[],int lim){
for(int i=0;i<lim-1;++i){
if((s[i]=getchar())==EOF||s[i]=='\n'){
if(s[i]=='\n'){
s[i] = '\0';
return i;
}
s[i] = '\0';
return -1;
}
}
s[lim-1]='\0';
return lim;
}
void copy(char from[],char to[]){
for(int i=0;(to[i]=from[i])!='\0';++i);
}
int main(){
// char s[100],lim = 99;
// if(getline(s,lim)!=0){
// printf("%s\n",s);j
// }
const int maxn = 1000;
char s[maxn],ans[maxn];
int len,maxLen = 0;
while((len=getline(s,1000))!=-1){
if(len>maxLen){
maxLen = len;
copy(s,ans);
}
}
printf("%s\n",ans);
return 0;
}
//test13.cpp
#include<stdio.h>
#include<ctype.h>
int atoi(char s[]){
int i,n,sign;
for(i=0;isspace(s[i]);i++)
;
sign = (s[i]=='-') ? -1 : 1;
if(s[i]=='+' || s[i]=='-')++i;
for(n=0;isdigit(s[i]);++i){
n = n*10+(s[i]-'0');
}
return sign*n;
}
int check(int a,int c){
if(a>='a'&&a<='z'&&c>a&&c<='z'){
return 1;
}else if(a>='A'&&a<='Z'&&c>a&&c<='Z'){
return 1;
}else if(a>='0'&&a<='9'&&c>a&&c<='9'){
return 1;
}
return 0;
}
void expand(char s[],char t[]){
int cnt = 0;
t[cnt++] = s[0];
for(int i=1;s[i]!='\0';++i){
if(s[i]=='-'&&check(s[i-1],s[i+1])){
for(int k=s[i-1]+1;k<s[i+1];++k){
t[cnt++] = (char)k;
}
}else{
t[cnt++] = s[i];
}
}
t[cnt] = '\0';
}
void expand2(char s[],char z[]){
int i,j;
char c;
i = j = 0;
while((c=s[i++])!='\0'){
if(s[i]=='-'&&s[i+1]>=c){
i++;
while(c<s[i]){
z[j++] = c++;
}
}else{
z[j++] = c;
}
}
z[j] = '\0';
}
#include<string.h>
void reverse(char s[]){
int c,i,j;
for(i =0,j=strlen(s)-1;i<j;i++,j--){
c = s[i];
s[i] = s[j];
s[j] = c;
}
}
#define abs(x) ((x)<0?-(x):(x))
void itoa(int n,char s[]){
int i,sign;
sign = n;
i=0;
do{
s[i++] = abs(n%10)+'0';
}while((n/=10) != 0);
if(sign<0){
s[i++] = '-';
}
s[i] = '\0';
reverse(s);
}
void itoa(int n,char s[],int minl){
int i,sign;
sign = n;
i=0;
do{
s[i++] = abs(n%10)+'0';
}while((n/=10) != 0);
if(sign<0){
s[i++] = '-';
}
for(;i<minl;++i)s[i] = ' ';
s[i] = '\0';
reverse(s);
}
void itob(int n,char s[],int b){
int i,j,sign;
sign = n;
i=0;
do{
j = abs(n%b);
s[i++] = (j<=9) ? j+'0' : j-10+'a';
}while((n/=b) != 0);
if(sign<0){
s[i++] = '-';
}
s[i] = '\0';
reverse(s);
}
int trim(char s[]){
int n;
for(n=strlen(s)-1;n>=0;n--)
if(s[n]!=' '&&s[n]!='\t'&&s[n]!='\n')
break;
s[n+1] = '\0';
return 0;
}
int main(){
test:
printf("%d\n",atoi(" -87437"));
char s[100] = "a-z0-9";
char z[100] = "g";
expand2(s,z);
reverse(z);
printf("%s\n",z);
itoa(-56778897,s,16);
printf("%s\n",s);
itob(77343785,s,15);
printf("%s\n",s);
goto test;
// printf("%d\n",-88%7);
return 0;
}