OneCrazyJoe 2022-12-03 23:57 采纳率: 100%
浏览 22
已结题

用指向数组的指针实现

下面三个是我写的代码,有一点问题,希望可以得到修改的版本

1.用指向数组的指针,实现判断字符串是否为回文

#define N 20
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
    char a[N],*p,*q;
    int i,j;
    
    printf("请输入一个字符串\n");
    gets(a);
    
    //计算字符串的长度,即i的初始值 
    p=a;
    for(i=0;i<N&&*p!='\0';i++,p++);
    i--;
    
    p=a;
    q=a;
    for(j=0;j<N&&*q!='\0';j++,q++,i--,p--)
    {
        if(*p!=*q)
        {
            break;
        }
    } 
    if(*q=='\0')
    {
        printf("是回文字符串");
    }
    else
    {
        printf("不是回文字符串");
    }
    
    return 0;
    
}

2.用指向数组的指针,实现计算字符串中单词的个数

#define N 100
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
    char a[N],*p;
    int i,count=1,n=0;
    
    printf("请输入一段字符串\n");
    gets(a);
    
    p=a;
    for(i=0;i<N;i++,p++)
    {
        if(n=2)
        {
            break;
        }
        if(*p=='\0')
        {
            count++;
            n++;
        }
    }
    
    printf("字符串中的单词个数为%d",count);
    
    return 0;
    
}

3.用指向数组的指针,实现计算两个字符串是否相等(不用strcmp)

#define N 100
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
    char a[N],b[N],*pa,*pb;
    int i,j,flag=0;
    
    printf("请输入两个字符串\n");
    gets(a);
    gets(b);
    
    pa=a;
    pb=b;
    for(i=0;i<N;i++,pa++)
    {
        for(j=0;j<N;j++,pb++)
        {
            if(*pa!=*pb)
            {
                flag=1;
                break;
            }
        }
    }
    if(flag==0)
    {
        printf("这两个字符串相等");        
    } 
    if(flag==1)
    {
        printf("这两个字符串不等");
    }
    return 0;
}

  • 写回答

2条回答 默认 最新

  • 关注

    代码写的有点啰嗦,判断回文的逻辑也有点问题,给你改一下
    (1)

    #define N 20
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
        char a[N],*p,*q;
        int i,j;
        printf("请输入一个字符串\n");
        gets(a);
        //计算字符串的长度,即i的初始值 
        p=a;
        q=a;//q指向字符串的开头
        for(i=0;i<N&&*p!='\0';i++,p++);//p移动到末尾了
        p--;//向前一个
        
        for(j=0;j<N && q<p;q++,p--)
        {
            if(*p!=*q)
            {
                printf("不是回文字符串");
                return 0;
            }
        } 
        printf("是回文字符串");
        return 0;
    }
    
    
    

    (2)这个题目的描述有点简单,单词只用空格分隔吗?

    img

    代码修改如下:

    #define N 100
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
        char a[N],*p;
        int i,count=0,n=0;
        printf("请输入一段字符串\n");
        gets(a);
        p=a;
        for(i=0;i<N;i++,p++)
        {
            if(*p == ' ')
            {
                count++;
            }
            if(*p=='\0')
            {
                count++;
                n++;
            }
        }
        printf("字符串中的单词个数为%d",count);
        return 0;
    }
    
    
    

    (3)

    #define N 100
    #include<stdio.h>
    #include<math.h>
    #include<stdlib.h>
    int main()
    {
        char a[N],b[N],*pa,*pb;
        int i,j,flag=0;
        printf("请输入两个字符串\n");
        gets(a);
        gets(b);
        pa=a;
        pb=b;
        for(i=0;*pa!='\0' && *pb!='\0';pb++,pa++)
        {
            if(*pa!=*pb)
            {
                printf("这两个字符串不等");
                return 0;
            }
        }
        if(*pa=='\0' && *pb=='\0')
        {
            printf("这两个字符串相等");        
        }else
            printf("这两个字符串不等");
        return 0;
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月12日
  • 已采纳回答 12月4日
  • 创建了问题 12月3日

悬赏问题

  • ¥100 科大讯飞语音唤醒词,unbuntu环境,报错
  • ¥15 可以实现这个有不同背景颜色的九九乘法表吗?
  • ¥50 python写segy数据时出错2
  • ¥20 关于R studio 做精确稳定检验的问题!(语言-r语言)
  • ¥50 用贝叶斯决策方法,设计CAD程序
  • ¥20 关于#目标检测#的问题:(qq收集表到时间才能填写,填写的份数有上限)
  • ¥50 ZYNQ7020双核FLAHS烧写的问题
  • ¥20 ue 5 中想要实现第一人称人物左右行走摆动的效果,摄像头只向右摆动一次(关键词-结点)
  • ¥15 AD9164瞬时带宽1.8G,怎么计算出来?
  • ¥15 鼠标右键,撤销删除 复制 移动,要怎样删除? HKEY_CLASSES_ROOT*\shellex\ContextMenuHandlers 没用