gpt4 book ai didi

C程序,反转数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:31:02 25 4
gpt4 key购买 nike

我正在编写 C 程序,它从标准输入读取输入一行字符。然后以相反的顺序输出该行字符。

它不打印反转数组,而是打印常规数组。

谁能帮帮我?我究竟做错了什么?

main()
{

int count;
int MAX_SIZE = 20;
char c;
char arr[MAX_SIZE];
char revArr[MAX_SIZE];

while(c != EOF)
{
count = 0;
c = getchar();
arr[count++] = c;

getReverse(revArr, arr);

printf("%s", revArr);

if (c == '\n')
{
printf("\n");
count = 0;
}
}
}


void getReverse(char dest[], char src[])
{


int i, j, n = sizeof(src);

for (i = n - 1, j = 0; i >= 0; i--)
{
j = 0;
dest[j] = src[i];
j++;
}
}

最佳答案

你那里有很多问题。第一个是当您在 main() 中使用它时,getReverse() 的范围内没有原型(prototype)。您应该提供一个原型(prototype),或者只是将 getReverse() 移动到 main() 之上,以便 main() 知道 关于它。

第二个是您在输入每个字符后尝试反转字符串,并且您的输入法不太正确(它在获取字符之前检查不确定的 c ).像这样会更好:

count = 0;
c = getchar();
while (c != EOF) {
arr[count++] = c;
c = getchar();
}
arr[count] = '\0';

这将为您提供一个正确的 C 字符串,尽管它的末尾有一个换行符,甚至可能是一个多行字符串,它与您的规范不匹配(“从标准输入读取一行字符”) .如果你想要一个换行符 文件结束来终止输入,你可以改用它:

count = 0;
c = getchar();
while ((c != '\n') && (c != EOF)) {
arr[count++] = c;
c = getchar();
}
arr[count] = '\0';

此外,c 实际上应该是一个 int,而不是一个 char,因为它必须能够存储每个可能的字符加上 EOF 标记。

您的 getReverse() 函数也有问题,主要是因为它没有在数组末尾放置一个结束字符串标记,还因为它使用了错误的大小( sizeof 而不是 strlen) 并且因为它似乎每次通过循环都重新初始化 j。无论如何,它都可以大大简化:

void getReverse (char *dest, char *src) {
int i = strlen(src) - 1, j = 0;
while (i >= 0) {
dest[j] = src[i];
j++;
i--;
}
dest[j] = '\0';
}

或者,一旦您成为熟练的编码员:

void getReverse (char *dest, char *src) {
int i = strlen(src) - 1, j = 0;
while (i >= 0)
dest[j++] = src[i--];
dest[j] = '\0';
}

如果您需要一个主程序来为您提供每一行的反转字符,您可以这样做:

int main (void) {
int count;
int MAX_SIZE = 20;
int c;
char arr[MAX_SIZE];
char revArr[MAX_SIZE];

c = getchar();
count = 0;
while(c != EOF) {
if (c != '\n') {
arr[count++] = c;
c = getchar();
continue;
}
arr[count] = '\0';
getReverse(revArr, arr);
printf("'%s' => '%s'\n", arr, revArr);
count = 0;
c = getchar();
}

return 0;
}

在样本运行中,它显示:

pax> ./testprog
hello
'hello' => 'olleh'
goodbye
'goodbye' => 'eybdoog'
a man a plan a canal panama
'a man a plan a canal panama' => 'amanap lanac a nalp a nam a'

关于C程序,反转数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16827959/

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