实验三、指针与字符串
一、调试实例
#include<stdio.h> #include<string.h> int main(void) { int i; char str[80],min[80]; printf("Input 5 strings:\n"); scanf("%s",str); strcpy(min,str); //将‘min=str;’改为调用‘strcpy(min,str);’ for(i=1; i<5; i++) { scanf("%s",str); if(strcmp(min,str)>0) strcpy(min,str); //将‘min=str;’改为调用‘strcpy(min,str); } printf("Min is :%s\n",min); return 0; }
二、基础编程题
(1). #include<stdio.h> #include<string.h> int main() { char a[55],la[55]; for(int i=0; i<5; i++) { scanf("%s",a); if(strlen(a)>strlen(la)) strcpy(la,a); } printf("%s\n",la); return 0; }
(2). #include<stdio.h> #include<string.h> int main() { char str[80],ser; gets(str); scanf("%c",&ser); int i,j; for(i=j=0; str[i]!='\0'; i++) { if(str[i]!=ser) str[j++]=str[i]; } str[j]='\0'; puts(str); return 0; }
(3). #include <stdio.h> void strmcpy(char *s,char *t,int m) { for(t+=m-1; *t; *s++=*t++); *s='\0'; } int main() { int m; char s[50],t[50]; gets(t); scanf("%d",&m); strmcpy(s,t,m); printf("%s",s); return 0; }
(4). #include <stdio.h> int main() { char a[100]; int i=0,j=0; gets(a); while(a[i]!='\0') i++; i--; for(;j<=i;i--,j++) { if(a[i]!=a[j]) break; } if(j<=i) printf("NO\n"); else printf("YES\n"); }
(5) #include <stdio.h> #include <string.h> int main() { char sen[256]; int ben=0,men=0,spa=0,num=0,oth=0; int i; gets(sen); for(i=0;i<(int)strlen(sen);i++) { if(sen[i]>='A'&&sen[i]<='Z') { ben++; } else if(sen[i]>='a'&&sen[i]<='z') { men++; } else if(sen[i]>=' ') { spa++; } else if(sen[i]>='0'&&sen[i]<='9') { num++; } else { oth++; } } printf("uppercase: %d\nlowercase: %d\nbreak: %d\ndigit: %d\nother: %d\n",ben,men,spa,num,oth); return 0; }
三、改错
#include<stdio.h> void strc(char *s,char *t);//改成*s,*t int main() { char s[80],t[80]; gets(s); gets(t); strc(s,t); puts(t); return 0; } void strc(char *s,char *t)//改成*s,*t { while(*t!='\0') t++; while(*t=*s) { t++;//s数组第一个字符给t数组原来的"\0"位置,然后进行指针位置向后移继续复制。 s++; } } //共有五个错误,指针函数定义错误
四、扩展编程题
(1) #include<stdio.h> #include<string.h> int main() { char b[100],a[5][100]; int i,j; for(i=0; i<5; i++) scanf("%s",a[i]); for(i=0; i<5; i++) { for(j=i+1; j<5; j++) { if(strcmp(a[i],a[j])>0) { strcpy(b,a[j]); strcpy(a[j],a[i]); strcpy(a[i],b); } } } for(i=0; i<5; i++) puts(a[i]); return 0; }
(2) #include<stdio.h> #define MAXN 10000 void f( long int x, char *p ); int main() { long int x; char s[MAXN]=""; scanf("%ld",&x); f(x,s); printf("%s\n",s); return 0; } void f(long x,char * s) { if (x < 0) s[0] = '-'; int i,j,c; for(i=(x<0?0:-1); x>0; i) { s[++i]=x%16; x/=16; } for(j=i; j>=0; j--) if(s[j]<10) s[j]+=48; else s[j]+=55; s[i+1]='\0'; for(j=0; j<i; j++,i--) { c=s[j]; s[j]=s[i]; s[i]=c; } }
(3) #include<stdio.h> #include<iostream> #include<algorithm> using namespace std; typedef long long ll; typedef double de; typedef char ar; int main() { ar a[10000]; while(cin>>a) { for(ll j=7; j<32; j=j+8) { ll sum=0,x=1; for(ll i=j; i>=j-7; i--) { if(a[i]=='1') sum=sum+x; x=2*x; } if(j<24) cout<<sum<<'.'; else cout<<sum<<endl; } } }