用指向数组的指针实现

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

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;
}

代码写的有点啰嗦,判断回文的逻辑也有点问题,给你改一下
(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;
}


您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632