1

我写了一小段代码来反转一个字符串。

#include "template.h"

void main()     {
        char temp;
        char *str = NULL;
        int read, i;
        size_t len = 20;


        read = getline(&str, &len, stdin);
        if (read > -1)
        {
                str[strlen(str) - 1] = '\0';
                for (i = 0; i < strlen(str)/2; i++)
                {
                        temp = str[i];
                        str[i] = str[strlen(str) - i];
                        str[strlen(str) - i] = temp;
                }
        printf("%s\n", str);
        }
        else
                printf("FOFF!\n");
}

当我输入abcdef输出时afedcb。为什么第一个字符没有移到末尾?

4

2 回答 2

2

您的代码中有错误

str[i] = str[strlen(str) - i]; // should be str[i] = str[strlen(str) - i -1];

str[strlen(str) - i] = temp ; // should be str[strlen(str) - i - 1] = temp;

否则当 i == 0 时,str[strlen(str) - 0] 是\0;

这是完整的工作代码

    #include "stdio.h"
    #include "string.h"


    int main()
    {
            char temp;
            char *str = NULL;
            int read, i;
            size_t len = 20;


            read = getline(&str, &len, stdin);
            if (read > -1)
            {
                    str[read - 1] = '\0';
                    for (i = 0; i < strlen(str)/2; i++)
                    {
                            temp = str[i];
                            str[i] = str[read - 1 - i - 1];
                            str[strlen(str) - i - 1] = temp;
                    }
                    printf("%s\n", str);
            }
            else
                    printf("FOFF!\n");
    }
于 2013-10-02T02:40:32.173 回答
0

这是我反转字符串的代码。

void reverse(char str[],int len)
{
    char c;
    int i;
    int n=(len-1)/2;
    for(i=0;i<=n;i++)
    {
        c=str[len-i-1];
        str[len-i-1]=str[i];
        str[i]=c;
    }
}
于 2013-10-02T02:38:20.007 回答