创建函数以反转字符串的问题

时间:2016-01-28 17:49:15

标签: c function

我需要创建一个返回字符串的函数。到目前为止,我已经提出了这个代码:

#include <stdio.h>
#include <string.h>
#define SIZE 256

void str_reverse(char[SIZE], char[SIZE]);

int main(void)
{
    char input[SIZE];
    char output[SIZE];


    printf("Please enter a string\n");
    fgets(input, SIZE, stdin);

    str_reverse(input, output);

    printf("%s \n", output);


    return 0;
}

void str_reverse(char in[SIZE], char out[SIZE])
{

    int i = strlen(in);
    int k = 0;

    for(int j = i; j>= 0; j--)
    {
        out[k] = in[j];
        k++;
    }


}

但是,每当我尝试运行代码时,我都无法获得输出。有没有人知道什么是错的

5 个答案:

答案 0 :(得分:0)

你的&#34;倒车&#34;也包括空字符。所以反向字符串的第一个字符是'\0'。所以字符串是空的。

更改:

for(int j = i ; j>= 0; j--) 

for(int j = i - 1; j>= 0; j--)

您还应该在for循环之前检查字符串长度是否为零。否则,i-1将成为SIZE_MAX,您将遇到问题!

str_reverse()中的以下简单条件会处理这种情况:

    size_t i = strlen(in);
    int k = 0;

   if (i<=1) return; //empty string or  contains only 1 char char.

答案 1 :(得分:0)

问题在于这一行

int i = strlen(in);

将其更改为

int i = strlen(in)-1;

strlen()返回字符串的大小,因此当您从in[]开始复制时,in[j]将为\0。它存储在out[0]

您需要做的另一项更改是在\0后面out[]放置一个for

for(int j = i; j>= 0; j--)
{
    out[k] = in[j];
    k++;
}
out[k] = '\0';    

答案 2 :(得分:0)

istrlen(in), so the first character you copy over to开始is the null byte at the end of the string. Every other character then appears after the null terminator, so out`是一个空字符串。

i开始strlen(in) - 1,然后添加空终结符和循环结束:

int i = strlen(in) - 1;   // start at the last non-null character
int k = 0;

for(int j = i; j>= 0; j--)
{
    out[k] = in[j];
    k++;
}
out[k] = '\0';    // add the null terminator

答案 3 :(得分:0)

k0ji时,您会执行以下操作:

out[0] = '\0';

因此,当函数返回时,out看起来像一个空字符串。

使用:

for(int j = i-1; j>= 0; j--)
{
    out[k] = in[j];
    k++;
}

out[k] = '\0';

答案 4 :(得分:0)

在函数变量i中设置以下方式

int i = strlen(in);

所以在循环中

for(int j = i; j>= 0; j--)
{
    out[k] = in[j];
    k++;
}

然后j等于i,则in[j]等于字符串'\0'的终止零in。因此数组out从零开始,它将包含一个空字符串。

最好以下列方式声明函数本身

char * str_reverse( char *out, const char *in );

并从函数返回指针out。在这种情况下,您可以编写例如

puts( str_reverse( output, input ) );

考虑到函数fgets通常还将新行字符存储在字符串中。你应该删除它。你可以用以下方式做到这一点

input[strcspn( input, "\n" )] = '\0';

也可以代替此语句中的int类型

int i = strlen(in);

最好使用类型size_t

size_t i = strlen(in);

它是函数strlen的返回值的类型。但在这种情况下,您还应该正确地编写循环。:)