2 qq 39668099 qq_39668099 于 2017.09.02 15:24 提问

c语言中,关于反转字符串。请问为什么输入ABCDE,不能反转。

#include

int main()
{
int i;
char String[20];
char Reverse[]={0};
printf("请输入字符串");
gets(String);
printf("你所输入的字符串为%s\n",String);
int size;
size=sizeof(String);

for(i=0;i<size-1;i++)
{
    Reverse[size-i-2]=String[i];
}

printf("输出源字符串:%s\n",String);
printf("输出目标字符串:%s\n",Reverse);

return 0;

}

6个回答

fight_in_dl
fight_in_dl   Ds   Rxr 2017.09.02 16:06
已采纳

修改后的代码如下,关键处有注释:

 int main()
{
    int i;
    char String[20];
    char Reverse[20] = { 0 };  //原代码Reverse大小为1
    printf("请输入字符串");
    gets_s(String);
    printf("你所输入的字符串为%s\n", String);
    int size;
    size = strlen(String); //用strlen库函数获取输入字符串的长度,需包含string.h头文件

    for (i = 0; i < size ; i++) //循环终止条件及循环体写法应修改为此
    {
        Reverse[size-i-1] = String[i];
    }
    printf("输出源字符串:%s\n", String);
    printf("输出目标字符串:%s\n", Reverse);

    return 0;

}

如果对您有帮助,请采纳答案好吗,谢谢!

qq_39668099
qq_39668099 可惜这面不能发照片
3 个月之前 回复
qq_39668099
qq_39668099 其实我用sizeof 函数,是在书上看到的
3 个月之前 回复
qq_39668099
qq_39668099 谢了,大神,有QQ吗?
3 个月之前 回复
qq_39668099
qq_39668099 谢了,大神,有QQ吗?
3 个月之前 回复
shenjinqiang2011
shenjinqiang2011   2017.09.02 15:57
 #include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[]) {
    int i;
    char String[20];
    char Reverse[20];
    printf("请输入字符串\n");
    gets(String);
    printf("你所输入的字符串为 %s\n",String); 
    int p=0;

    for(i=19;i>=0;i--)
    {
        Reverse[19-i] = String[i];
        printf("%c ",String[i]);
    }
    Reverse[19]='\0';
    printf("输出源字符串 %s\n",String);
    printf("输出目标字符串 %s\n",Reverse);

    return 0;
}

qq_39668099
qq_39668099 谢了
3 个月之前 回复
weixin_40036080
weixin_40036080   2017.09.02 15:39

char Reverse[]={0};这里只定义了一个位置,改改,char Reverse[20];

weixin_40036080
weixin_40036080 #include<stdio.h> #include<string.h> int main() { int i,j; char String[20]; char Reverse[20]; printf("请输入字符串"); gets(String); printf("你所输入的字符串为%s\n",String); int size; j=size=strlen(String); for(i=0;i<size;i++,j--) { Reverse[i]=String[j-1]; } Reverse[size]='\0'; printf("reverse:"); puts(Reverse); printf("\n"); return 0; }
3 个月之前 回复
weixin_40036080
weixin_40036080 #include<stdio.h> #include<string.h> int main() { int i,j; char String[20]; char Reverse[20]; printf("请输入字符串"); gets(String); printf("你所输入的字符串为%s\n",String); int size; j=size=strlen(String); for(i=0;i<size;i++,j--) { Reverse[i]=String[j-1]; } Reverse[size]='\0'; printf("reverse:"); puts(Reverse); printf("\n"); return 0; }
3 个月之前 回复
weixin_40036080
weixin_40036080 回复qq_39668099: 你发现sizeof测的是字符节的位数,也就是一个字符4节,你要用strlen函数才是你想要测的字符串长度
3 个月之前 回复
qq_39668099
qq_39668099 回复qq_39668099: 不过还是谢谢你了
3 个月之前 回复
qq_39668099
qq_39668099 不行,我试了一下,你 的方法
3 个月之前 回复
shenjinqiang2011
shenjinqiang2011   2017.09.02 15:56

#include
#include

int main(int argc, char *argv[]) {
int i;
char String[20];
char Reverse[20];
printf("请输入字符串\n");
gets(String);
printf("你所输入的字符串为 %s\n",String);
int p=0;

for(i=19;i>=0;i--)
{
    Reverse[19-i] = String[i];
    printf("%c ",String[i]);
}
Reverse[19]='\0';
printf("输出源字符串 %s\n",String);
printf("输出目标字符串 %s\n",Reverse);

return 0;

}

weixin_40036080
weixin_40036080   2017.09.02 16:18
#include<stdio.h>
#include<string.h>
int main()
{
int i,j;
char String[20];
char Reverse[20];
printf("请输入字符串");
gets(String);
printf("你所输入的字符串为%s\n",String);
int size;
j=size=strlen(String);

for(i=0;i<size;i++,j--)
{
    Reverse[i]=String[j-1];
}
Reverse[size]='\0';
printf("reverse:");
puts(Reverse);
printf("\n");
return 0;

}
qq_39668099
qq_39668099 回复littlescrew: 嗯,你有QQ吗?,这上面说不清,想以后有问题请教你,
3 个月之前 回复
weixin_40036080
weixin_40036080 照着你原来的改了一,这个可行,可能那个‘\0,这里你有疑问,这个是结束字符,然后输出的时候到这里就停了
3 个月之前 回复
SeaTalks
SeaTalks   2017.09.02 16:21

for循环只的结束条件从size-1改成( size-1)/2

SeaTalks
SeaTalks sorry,没看清,还以为你是要在同一个字符数组中反转呢,忽略我的答案
3 个月之前 回复
SeaTalks
SeaTalks 遍历整个字符串长度,相当于翻转了两次呀,又回来了
3 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片