C语言指针练习
题目
1、有一个字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串;(复制操作在子函数中实现,并用指针传递);
2、输入3个整数,按照由大到小的顺序输出,并要求用指针进行操作;
3、输入3个字符串,按照由小到大的顺序将其输出,并要求用指针进行操作;
4、编写一程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。
5、编写一个函数,实现将一个已知字符串的内容复制到一个新的字符串。
6、编制一个字符替换函数,实现将已知字符串str中,所有ch指定的字符都用ch2指定的字符代替。函数原型:void replace (char *str,char ch,char ch2)
7、自己编写一个函数,比较两个字符串是否相等,函数原型为:int Compare (char *str1, char *str2)
8、编写一个函数,删除一个字符串中的指定字符,函数原型:Void delStr(char *str,char ch)
代码
1、有一个字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串;(复制操作在子函数中实现,并用指针传递);
#include <stdio.h>
/* 有一个字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符
复制成为另一个字符串;(复制操作在子函数中实现,并用指针传递); */
int main(void)
{
int n,m;
char string[100];
printf("输入一个数n:"); //n是字符串一共的个数
scanf("%d",&n);
printf("输入一串字符 :");
scanf("%s",string);
printf("输入一个数m:"); //m是需要移动赋值的字符串数
scanf("%d",&m);
printf("结果为:");
copy(string,n,m);
return 0;
}
void copy(char* str, int n, int m)
{
int i,j;
char string[100];
char *p = string;
i = m-1;
j = 0;
str = str + i; //从m-1个位置开始赋值给一个新的字符数组
for( ;i < n; i++,j++)
{
*(p+j) = *(str++);
printf("%c",*(p+j));
}
}
2、输入3个整数,按照由大到小的顺序输出,并要求用指针进行操作;
#include <stdio.h>
/* 输入3个整数,按照由大到小的顺序输出,并要求用指针进行操作; */
int main() {
int n1,n2,n3;
printf("输入三个整数\n");
scanf("%d%d%d",&n1,&n2,&n3);
int *p1, *p2, *p3, temp;
p1=&n1;
p2=&n2;
p3=&n3;
if (*p1 < *p2)
{
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
if (*p2 < *p3)
{
temp = *p2;
*p2 = *p3;
*p3 = temp;
}
if (*p1 < *p2)
{
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
printf("大到小:%d,%d,%d\n", n1, n2, n3);
return 0;
}
3、输入3个字符串,按照由小到大的顺序将其输出,并要求用指针进行操作;
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/* 输入3个字符串,按照由小到大的顺序将其输出,并要求用指针进行操作; */
void swap(char** a,char** b)
{
char* temp;
temp= *a;
*a= *b;
*b=temp;
}
int main()
{
char a[50],b[50],c[50];
printf("输入三串字符") ;
scanf("%s%s%s",a,b,c);
char *p1=a,*p2=b,*p3=c;
if(strcmp(p1,p2)>0) swap(&p1,&p2);
if(strcmp(p1,p3)>0) swap(&p1,&p3);
if(strcmp(p2,p3)>0) swap(&p2,&p3);
printf("由小到大的顺序为:%s\t%s\t%s\t",p1,p2,p3);
return 0;
}
4、编写一程序,输入月份号,输出该月的英文月名。例如,输入“3”,则输出“March”,要求用指针数组处理。
#include <stdio.h>
#include <stdlib.h>
/* 编写一程序,输入月份号,输出该月的英文月名。例如,输入"3",则输出"March",要求用指针数组处理。 */
int main() {
int month;
char *Month[12] = { "January","February","March","April","May","June","July","August","September","October","November","December" };
printf("请输入月份:");
scanf("%d", &month);
for (;month < 1 || month>12; printf("您的输入有误,请重新输入\n"), scanf("%d", &month));
printf("%d月的英文名为:%s\n", month, *(Month + month - 1));
return 0;
}
5、编写一个函数,实现将一个已知字符串的内容复制到一个新的字符串。
#include<stdio.h>
/*编写一个函数,实现将一个已知字符串的内容复制到一个新的字符串。*/
void strcpy_s(char *s1,char *s2){
printf("字符串s1为:");
while(*s1=*s2){
printf("%c",*s1);
s1++;
s2++;
}
}
void main(){
char s1[32];
char s2[32];
printf("请输入字符串s1:");
gets(s1);
printf("请输入字符串s2:");
gets(s2);
strcpy_s(s1,s2);
}
6、编制一个字符替换函数,实现将已知字符串str中,所有ch指定的字符都用ch2指定的字符代替。函数原型:void replace (char *str,char ch,char ch2)
#include <stdio.h>
#include <string.h>
/* 编制一个字符替换函数,实现将已知字符串str中,所有ch指定的字符都用ch2指定的字符代替。
函数原型:void replace (char *str,char ch,char ch2)*/
void replace(char *str,char *ch,char *ch2){
char bstr[strlen(str)];//转换缓冲区
memset(bstr,0,sizeof(bstr));
int i;
for(i=0;i<strlen(str);i++){
if(!strncmp(str+i,ch,strlen(ch))){//查找目标字符串
strcat(bstr,ch2);
i+=strlen(ch)-1;
}else{
strncat(bstr,str+i,1);//保存一字节进缓冲区
}
}
strcpy(str,bstr);
}
int main(void) {
char str[]="day by day";
printf("原字符为:%s\n",str);
char a[5],b[5];
printf("输入要被替换字符:");
scanf("%s",&a);
printf("输入替换字符:");
scanf("%s",&b);
replace(str,a,b);
printf("替换后为:") ;
puts(str);
return 0;
}
7、自己编写一个函数,比较两个字符串是否相等,函数原型为:int Compare (char *str1, char *str2)
#include <stdio.h>
#include <stdlib.h>
/* 自己编写一个函数,比较两个字符串是否相等,
函数原型为:int Compare (char *str1, chstr1r *str2) */
int Compare(char *str1,char *str2)
{
int i,flag=0;
for(i=0;str1[i]!='\0'&&str2[i]!='\0';)
if(str1[i]==str2[i])
i++;
else{
flag=0;
break;
}
if(str1[i]=='\0'&&str2[i]=='\0')
flag=1;
return flag;
}
int main()
{
char str1[10];
char str2[10];
printf("输入两串字符:");
scanf("%s%s",&str1,&str2);
if(Compare(str1,str2)==1)
printf("相同");
else printf("不相同");
return 0;
}
8、编写一个函数,删除一个字符串中的指定字符,函数原型:Void delStr(char *str,char ch)
#include <stdio.h>
/*编写一个函数,删除一个字符串中的指定字符,
函数原型:Void delStr(char *str,char ch)*/
void delStr(char *str, char ch){
int k=1;
char *p=str;
while(*p!=ch&&*p!='\0')
p++;
while(*p!='\0'){
char *t=p+1;
if(*t==ch)
k++;
else
*(p-k+1)=*t;
p++;
}
}
int main(){
char str[666],ch;
printf("请输入字符串:");
fgets(str,666,stdin);
printf("请输入要删除的字符:");
scanf("%c",&ch);
delStr(str, ch);
printf("%s",str);
return 0;
}
结果
1、
2、
3、
4、
5、
6、
7、
8、