1

代码编译成功。但我无法反转字符串。因为我是一个初学者级的程序员,我真的无法弄清楚我犯的错误。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {      
    int temp, i, j, length;
    char name[20], name1[20];

    printf(" Enter string \n");
    scanf("%s", name);
    length = strlen(name);
    printf(" %d", length);
    for (i = length - 1; i >= 0; i--) {
        name1[length - i] = name[i];
    }
    printf("%S ", name1);
    
    return 0;
}
4

4 回答 4

1

我注意到的问题:

  • length-i将在此处关闭 +1:
    name1[length-i]=name[i];
    
  • 您忘记添加空终止符 ( \0)。
  • %S是一个非标准的printf格式化程序。你可能想要%s.

建议更改:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main() {
    char name[20], name1[20];

    printf(" Enter string \n");

    if(scanf("%19s", name) != 1) {         /* check that input works */
        fprintf(stderr, "input failure\n");
        return 1;
    }

    int length = strlen(name);

    printf(" %d\n", length);

    for(int i = 0; i < length; ++i) {
        name1[length - i - 1] = name[i];  /* corrected indexing */
    }

    name1[length] = '\0';                 /* add null terminator */

    printf("%s\n", name1);                /* %s instead of %S */
}
于 2021-05-24T06:58:44.563 回答
1

在打印中使用小写“s”:

printf("%s ",name1);

类似代码:https ://www.programmingsimplified.com/c-program-reverse-string

于 2021-05-24T06:40:28.207 回答
0

你可以试试这个:-

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int i, length;
    char name[20], temp;
    printf(" Enter string \n");
    scanf("%s", name);
    length = strlen(name);
    printf(" %d", length);
    for(i = 0; i < length /2; i++)
    {
        temp = name[i];
        name[i] = name[length-i-1];
        name[length-i-1] = temp;
    }
    printf("\n%s", name);
    return 0;
}
于 2021-05-24T06:58:57.213 回答
0

以下是您的代码中的一些问题:

  • 您应该限制存储到namewith中的字符数%19s

  • name1[length - i] = name[i];不使用正确的偏移量。尝试第一次迭代:您i是否length-1将最后一个字符复制到位置,length - (length - 1)因此位置1而不是0. 改用这个:

      name1[length - i - 1] = name[i];
    
  • 您必须在反转字符串的末尾设置一个空终止符:

      name1[length] = '\0';
    
  • printf()通话中,%S是不正确的。改为使用%s并附加换行符。

这是修改后的版本:

#include <stdio.h>

int main() {      
    char name[20], name1[20];
    int i, length;

    printf(" Enter string:\n");
    if (scanf("%19s", name) == 1) {
        length = strlen(name);
        printf("%d\n", length);
        for (i = 0; i < length; i++) {
            name1[length - i - 1] = name[i];
        }
        name1[length] = '\0';
        printf("%s\n", name1);
    }
    return 0;
}
于 2021-05-24T07:04:43.143 回答