用指针和数组两种方法实现如下功能:将一个字符串按逆序存放。

2025-04-15 04:22:06
推荐回答(3个)
回答1:

#include 
#include 
void dz(char *str);
int main()
{

    char str[100];
    printf("输入一个字符串:");
    scanf("%s",str);
    dz(str);
    printf("倒置后的字符串:%s\n",str);
    return 0;
}
void dz(char *str)
{
    int len;
    char *p0,*p1,c;
    len=strlen(str);
    p0=&str[0];
    p1=&str[len-1];
    while(1)
    {
        c=*p1;
        *p1=*p0;
        *p0=c;
        p0++;p1--;
        if(p1<=p0)
            break;
    }
}

回答2:

#include
#include
char* inv1(char*s)
{
int i,n;
char ch;
n=(int)strlen(s);
for(i=0;i<=n/2;i++)
{
ch=s[i];
s[i]=s[n-1-i];
s[n-1-i]=ch;
}
return s;
}
char *inv2(char*s)
{
char *p1,*p2;
char ch;
p1=s;
p2=s+strlen(s)-1;
while(p1 {
ch=*p1;
*p1=*p2;
*p2=ch;
p1++;
p2--;
}
return s;
}
int main()
{
char str[]="hello!";
printf("原始字符串为%s\n",str);
printf("数组逆序后字符串为:\n");
puts(inv1(str));
printf("指针逆序后字符串为:\n");
puts(inv2(str));//两次逆序和原来一样
return 0;
}

回答3:

#include 
#include 

char* fun1(char*s)
{
    int i,n;
    char ch;
    n=(int)strlen(s);
    for(i=0;i<=n/2;i++)
    {
        ch=s[i];
        s[i]=s[n-1-i];
        s[n-1-i]=ch;
    }
    return s;
}
char *fun2(char*s)
{
    char *p1,*p2;
    char ch;
    p1=s;
    p2=s+strlen(s)-1;
    while(p1    {
        ch=*p1;
        *p1=*p2;
        *p2=ch;
        p1++;
        p2--;
    }
    return s;
}
int main()
{
    char str[]="1234567890";
char buf[]="abcdefgh";
    printf("原始字符串为%s\n",str);
    printf("数组逆序后字符串为:\n");
    puts(fun1(str));
printf("原始字符串为%s\n",buf);
    printf("指针逆序后字符串为:\n");
    puts(fun2(buf));//两次逆序和原来一样
    return 0;
}

原始字符串为1234567890
数组逆序后字符串为:
0987564321
原始字符串为abcdefgh
指针逆序后字符串为:
hgfedcba
Press any key to continue