C语言 实验九 字符串

C语言 实验九 字符串

可加const防止数组指针所指向的内容被修改导致main函数数组值发生改变

有谁知道第四题还有其他方法用指针表示吗?

一、实验目的
1.掌握字符串的输入输出格式以及不同输入输出方法之间的区别。
2. 掌握字符串的复制、连接、比较等常用的字符串处理函数。
3.掌握字符指针的用法。
二、实验学时
2 学时
三、实验内容
1.定义一个字符数组,分别用 getchar()/putchar()、scanf(“%s”,…)/
printf(“%s”,…)、gets()/puts()语句输入输出,分析三种输入输出方法的
区别。
2.输入一个字符串,逆序输出这个字符串(最后的字符最先输出)。如输入
“abcdef”,输出“fedcba”
3.自编一个字符串的连接函数(和 strcat 功能一样),用指针实现。
4.自编一个字符串的比较函数(和 strcmp 功能一样),用指针实现。
5. 从键盘输入一个字符串,将此字符串中从第 m 个字符开始的 n 个字符复制成
另一个字符串并输出显示(其中 m 和 n 值从键盘输入)。
6. 从键盘输入 5 个字符串,输出显示最长的字符串。
7.编写程序判断一个字符串是否回文字符串,若是回文,则输出“YES“,否则
输出“NO”。回文字符串:是一个正读和反读都一样的字符串。

①用getchar()/putchar():

#include<stdio.h>
main( )
{
        int i=0;                
        char x[100];             
        printf("输入一行字符:");        
        do               
        {   
                    x[i]=getchar();                     
                    putchar(x[i]);               
                    i++;        
         }   
         while(x[i]!='0');
}

可以输入空格符和制表符,但只能一个一个的输入读取输出,遇到换行符停止读取。若要输出一行字符,则需要用循环结构。

②用scanf(“%s”,…)/printf(“%s”,…):

#include<stdio.h>
main( )
{
        int i=0,j=0;                
        char x[100];               
        printf("输入一行字符:");                
        scanf("%s",&x);                   
        printf("%s",x);
}

用scanf输入字符串时,%s格式说明是以用空格、回车符、制表符等间隔符表示字符串输入结束。因此输入一个字符串时,其中不能包含空格字符。要将包含空格符的字符串输入到字符数组中,必须用字符串输入函数:gets函数。或用%c格式进行单个字符的输入,这个可以输入回车符,但若要输入字符串,则要循环结构。

③用gets()/puts():

#include<stdio.h>
#include<string.h>
main( )
{  
             char x[100];             
             printf("输入一行字符:");        
             gets(x);        
             puts(x);
}

gets函数则能从终端键盘读入字符串(包含空格符),直到读入一个换行符为止。但源文件include命令行中应该包含头文件名string.h。

①将字符串逆序放在另一个数组

#include<stdio.h>
#include<string.h>
#define N 100
main( )
{
        int i,j=0,s;                
        char x[N],p[N];             
        printf("输入一个字符串:");        
        gets(x);        
        s=strlen(x);        
        for(i=s-1;i>=0;i--)        
        p[j++]=x[i];        
        puts(p);
}

②将字符串中关于中心对称位置字符交换位置

#include<stdio.h>
#include<string.h>
#define N 100
main( )
{
        int i,j,s;                
        char x[N],p;             
        printf("输入一个字符串:");        
        gets(x);        
        s=strlen(x);        
        for(i=s-1,j=0;i>=s/2/*或i>s/2-1或i!=s/2-1*/;i--,j++)        
        p=x[i],x[i]=x[j],x[j]=p;        
        puts(x);
}

③让后面的数往前不断移位,直至最后一位移到第一位、新的最后一位移到第二位……

#include<stdio.h>
#include<string.h>
#define N 100

main( )
{
        int i,j,s;                
        char x[N],p;             
        printf("输入一个字符串:");        
        gets(x);        
        s=strlen(x);        
        for(j=s-1;j>0;j--)        
        for(i=s-1;i>s-j-1;i--)        
        p=x[i],x[i]=x[i-1],x[i-1]=p;        
        puts(x);
}

①用数组下标移动

#include<stdio.h>
#include<string.h>
#define N 100

char *lj(char *p,char q[])
{
         int i,a,b;         
         a=strlen(p);b=strlen(q);         
         for(i=0;i<b;i++)   
         p[a+i]=q[i];
         return p;
}

main( )
{
        char m[2*N],n[N];        
        printf("输入两个字符串m,n:");        
        scanf("%s%s",m,n);  
        //或者 printf("连接后的字符串:\n%s",lj(m,n));      
        lj(m,n);        
        printf("连接后的字符串:\n%s",m);
}

②用指针移动

#include<stdio.h>
#define N 100

void lj(char *p,char *q)
{
         int i,a,b;         
         while(*p!='\0')  //将指针移到末尾         
         p++;         
         //将q字符串复制到字符串p后面         
         for(;*q!='\0';p++,q++)          
         *p=*q;        
         *p='\0';
}

main( )
{
        char m[2*N],n[N];        
        printf("输入两个字符串m,n:\n");        
        scanf("%s%s",m,n);        
        lj(m,n);        
        printf("连接后的字符串:\n%s",m);
}
#include<stdio.h>
#include<string.h>
#define N 100

void bj(char p[],char q[],int *x)
{
         int i=0,j;         
         j=strlen(p);         
         while((*x=p[i]-q[i])==0)         
         {       
                    if(i==j)break;                 
                    i++;               
          }     
}

main( )
{
        int x;        
        char m[N],n[N];        
        printf("输入两个字符串m,n:");        
        scanf("%s%s",m,n);        
        bj(m,n,&x);        
        if(x>0)        
        printf("m>n");        
        else if(x<0)        
        printf("m<n");        
        else        
        printf("m=n");
}

①用数组下标移动

#include<stdio.h>
#include<string.h>
#define N 100

main( )
{
        char a[2*N],b[N];        
        int m,n,i,j=0;        
        printf("输入一个字符串a:\n");        
        gets(a);        
        printf("将输出此字符串第 m 个字符开始的 n 个字符\n请输入m,n:\n");        
        scanf("%d,%d",&m,&n);        
        for(i=m-1;i<m+n-1;i++)        
        b[j++]=a[i];        
        printf("输出结果为:\n%s",b);
}

②用指针移动

#include<stdio.h>
#include<string.h>
#define N 100

main( )
{
        char a[2*N],b[N],*p=a,*q=b;        
        int m,n,i,j;        
        printf("输入一个字符串a:\n");        
        gets(a);        
        printf("将输出此字符串第 m 个字符开始的 n 个字符\n请输入m,n:\n");       
        scanf("%d,%d",&m,&n);        
        for(i=1;i<m;i++,p++);        
        for(j=0;j<n;j++)        
        *q++=*p++;        
        printf("输出结果为:\n%s",b);
}
#include<stdio.h>
#include<string.h>
#define N 100

main( )
{
        char p[5][N],*q;        
        int i;        
        printf("请输入五个字符串:");        
        scanf("%s",p[0]);        
        q=p[0];        
        for(i=1;i<5;i++)        
        {   
                    scanf("%s",p[i]);               
                    if(strlen(q)<strlen(p[i]))               
                    q=p[i];        
        }        
        printf("max=%s",q);
}

①将字符串逆序复制到另外一个数组,比较两者每个字符的大小

#include<stdio.h>
#include<string.h>
#define N 100

void bj(char p[],char q[],int *x)
{
         int i=0,j;         
         j=strlen(p);         
         while((*x=p[i]-q[i])==0)         
         {            
                     i++;                 
                     if(i==j)break;               
          }     
}

main( )
{
        char p[N],q[N];        
        int i,j=0,s,x;        
        printf("请输入一个字符串:");        
        scanf("%s",p);        
        s=strlen(p);        
        for(i=s-1;i>=0;i--)        
        q[j++]=p[i];        
        bj(p,q,&x);        
        if(x==0)        
        printf("YES");        
        else        
        printf("NO");
}

②将字符串逆序复制到另外一个数组,用strcmp比较两者大小

#include<stdio.h>
#include<string.h>
#define N 100

main( )
{
        char p[N],q[N];        
        int i,j=0,s,x;        
        printf("请输入一个字符串:");        
        scanf("%s",p);        
        s=strlen(p);        
        for(i=s-1;i>-2;i--)        
        q[j++]=p[i];        
        if(strcmp(p,q)!=0)        
        printf("NO");        
        else        
        printf("YES");
}

③一个个判断关于字符串中心对称位置的字符是否相等

#include<stdio.h>
#include<string.h>
#define N 100

main( )
{
        char p[N];        
        int i,j,s,x=0;        
        printf("请输入一个字符串:");        
        scanf("%s",p);        
        s=strlen(p);        
        for(i=s-1,j=0;i>0/*i>=s/2或i!=s/2-1或i>s/2-1*/;i--,j++)        
        if(p[i]!=p[j])        
        x=1;        
        if(x==0)        
        printf("YES");        
        else        
        printf("NO");
}
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值