反向字符串(交换)

时间:2018-07-12 10:50:00

标签: c

我需要有关此考试的帮助。我需要反转输入字符串。

int main(void)
{
    char str[30];
    int strlen; int i=0; int count=0;int temp;int j;
    printf("Enter the string \n");
    gets(str);

    while(str[i]!='\0')
    {
        i++;
        count++;
    }
    strlen=count;
    printf("The length of the string:%d\n", strlen);
    i=0;
    j=strlen;

    while(i<j)
    {
        temp=str[i];
        str[i]=str[j];
        str[j]=temp;
        i++;
        j--;
    }
    printf("Reverse string :%s",str);

    return 0;
}

问题在于,最后它没有显示字符串。 它告诉我:

"Reverse string :" 

,即没有反向字符串。我的错误在哪里?

3 个答案:

答案 0 :(得分:1)

您正在执行的代码中

j=strlen;

j指向字符串的最后一个索引,即'\ 0'

然后在循环中设置str[i]=str[j];

因此,第一个索引将是\0

打印str不会显示任何内容

为了使代码正确设置j=strlen - 1;

答案 1 :(得分:0)

尝试一下:-

由于在您的代码中,您正在分配指向j=strlen\0字符的null,将其更改为j=strlen-1;

char str[30];
int strlen;int i=0;int count=0;int temp;int j;
printf("Enter the string \n");
gets(str);

while(str[i]!='\0')
{
    i++;
    count++;
}
 strlen=count;
printf("The lenht of the string:%d\n",strlen);
i=0;
j=strlen-1;

while(i<j)
{
    temp=str[i];
    str[i]=str[j];
    str[j]=temp;
    i++;
    j--;
}
printf("Reverse string :%s",str);

答案 2 :(得分:0)

问题出在j=strlen;'. People will suggest you to change it to j = strlen-1;`

但是,我建议从根本上解决。

while(str[i]!='\0')
{
    i++;
    count++;
}

此循环后,count将保留值作为具有'\ 0'字符串的索引。在这里,您应该递减count,然后将其分配给strlen。这使代码更易于理解。

进行此更改后,您还必须更改

printf("The length of the string: %d\n", strlen);

printf("The length of the string: %d\n", strlen+1);

它会打印

The length of the string: 4 

由于递减,而不是5的{​​{1}}。

此外,一旦在代码中包含"Hello"头文件,strlen就是一个函数。为了使它易于移植,您应该始终使用命名约定,该约定不会在代码中将标准的通用函数名称(例如string.h)用作变量名。

比您现有的代码稍好一点的版本(仅使用您的逻辑)将少使用一个变量,并且看起来像这样:

strlen