实验2
p193:
7题:
编写函数 delstr(char *pc,int im,int in),删除字符串中制定位置im处开始的in个字节,删除成功函数返回被删字符串,否则返回空值。
#include<stdio.h> #include<string.h> char *delstr(char *pc,int im,int in); int main() { char str[50]; int a,b; char *p; printf("请输入一串字符:\n"); gets(str); printf("请输入删除的位置和个数:\n"); scanf("%d%d",&a,&b); p=delstr(str,a,b); if(p==NULL) { printf("超出范围。"); } else { puts(p); } return 0; } char *delstr(char *pc,int im,int in) { char *temp1=pc+im-1,*temp2=temp1+in-1; char *end=NULL,*p; static char a[50]; int len=0,i=0; len=strlen(pc); end=pc+len-1; if(temp1>end||temp2>end) return NULL; else { for(;temp1<=temp2;temp1++) { a[i++]=*temp1; *temp1=' '; } } p=a; return p; }
8题:
编写函数strlink(char *pv1,char *pc2),把字符串pc2连接到pc1的后面,形成一个完整的字符串。
#include<stdio.h> void strlink(char *pc1,char *pc2); int main() { char a[50]={"hello world"}; char b[10]; puts(a); printf("请输入一串字符,将连接到上面字符串中:"); gets(b); strlink(a,b); puts(a); return 0; } void strlink(char *pc1,char *pc2) { for(;*pc1!='\0';pc1++); for(;*pc2!='\0';pc1++,pc2++) { *pc1=*pc2; } *pc1='\0'; }
9题:
编写函数char *huiwen(char *pc),检查字符串pc是否是回文,如果是返回字符串“yes”,否则返回“no”.如:abcba是回文。
#include<stdio.h> #include<string.h> char *huiwen(char *pc); int main() { char a[50]; char *link=NULL; printf("请输入一串字符,将判断其是否是回文:\n"); gets(a); link=huiwen(a); puts(link); return 0; } char *huiwen(char *pc) { int len=0,flag=1; char *temp=NULL,*str=NULL; len=strlen(pc); temp=pc+len-1; for(;pc!=temp;pc++,temp--) { if(*pc!=*temp) flag=0; } if(flag) { str="yes"; } else { str="no"; } return str; }
总结:
1 .char a[]="hello world";
这里数组是字符串变量,是可以改变的。
但是 char *str="hello world"; "hello world"是字符串常量,用一个指针指向了字符串常量,但是,常量值是不能改变的,所以,你要修改它的值就会出错。
这里数组是字符串变量,是可以改变的。
但是 char *str="hello world"; "hello world"是字符串常量,用一个指针指向了字符串常量,但是,常量值是不能改变的,所以,你要修改它的值就会出错。
2.编写连接函数时,被连接的字符串数组要定义的足够长,不然会越界。
3.在返回指针时,如果指针指向的是常量,则可以返回成功,否则当函数调用结束后,栈被释放,无法找到指针指向的内容。

浙公网安备 33010602011771号