gpt4 book ai didi

c - C中的反向字符串输出不正确

转载 作者:行者123 更新时间:2023-11-30 21:38:45 25 4
gpt4 key购买 nike

我正在编写一个程序来反转 C 中输入的字符串,我的代码是:

#include<stdio.h>
#include<string.h>
void main()
{
int sz;
printf("Enter the size of the string : ");
scanf("%d",&sz);
char str[sz];
gets(str);
printf("Enter the string : \n");
gets(str);
char str1[sz];
int i =0;
--sz;
for(i=0;i<=sz;i++)
{
str1[sz-i]=str[i];

}
printf("%s",str1);
}

这个程序对于字符串大小 8,9 和 10 给出了奇怪的输出对于大小 8,将打印反转字符串,后跟一个空格和 2 个垃圾字符;对于大小 9,将打印反转字符串,后跟 2 个垃圾字符;对于大小 10,将打印反转字符串,后跟一个垃圾字符;对于其他字符串,将打印反转字符串,后跟 2 个垃圾字符程序正常运行的大小。为什么会发生这种情况?

最佳答案

注意:

  • 尝试通过询问用户来限制输入字符串并不明智,用户仍然可以写入长度更大/更小的字符串
  • 从控制台读取字符串默认不允许空格

第一个选项:
读取静态大小的字符串:

 char original[5];
scanf("%5s", original); // String containing 5 chars

第二个选项:
读取可变大小的字符串:

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

// Length of String
unsigned expected;

printf("Enter the length of the string: ");
scanf("%u", &expected);

char *temp; // Warning: Uninitialized

// Get string
printf("Enter the string: ");
scanf("%s", temp);

unsigned actual = strlen(temp);
unsigned length = actual > expected ? expected : actual;

char *string = (char *) malloc(length * sizeof(char));
char *reverse = (char *) malloc(length * sizeof(char));

// Trim string to proper size
for (int i = 0; i < length; i++) {
string[i] = temp[i];
}

// Reverse string
for (int i = 0, j = length - 1; i <= j; i++) {
reverse[i] = string[j - i];
}

// Print Strings
printf("%s", string);
printf("\n%s", reverse);

关于c - C中的反向字符串输出不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47920524/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com