【发布时间】:2021-03-18 15:10:47
【问题描述】:
我不太了解这个程序。我不明白 for 循环中发生了什么。谁能用简单的话给我解释一下。而且该网站也没有很好地解释它。这是该网站的链接。 https://www.geeksforgeeks.org/print-words-string-reverse-order/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void printReverse(char str[])
{
int length = strlen(str);
FILE *fptr;
if((fptr=fopen("Question1.txt","w"))==NULL)
{
printf("Invalid file");
exit(0);
}
int i;
for (i = length - 1; i >= 0; i--) {
if (str[i] == ' ')
{
str[i] = '\0';
printf("%s ", &(str[i]) + 1);
fprintf(fptr,"%s ", &(str[i]) + 1);
}
}
fprintf(fptr,"%s",str);
printf("%s.", str);
fclose(fptr);
}
int main()
{
char str[1000];
//clrscr();
printf("Enter string: ");
scanf("%[^\n]s", str);
printReverse(str);
//getch();
return 0;
}
在for 循环中,为什么要放入&(str[i])+1?还有printf("%s.", str)--这只有第一个字;怎么样?
【问题讨论】:
-
请edit您的问题并告诉我们您在理解链接网页上的解释时有什么困难。链接页面甚至包含带有解释性 cmets 的 C 代码。
-
您链接的文章用非常简单的术语解释了它。我不认为这里的任何人都可以让它变得更简单。它从字符串的末尾循环到开头寻找空格字符。如果它找到一个空格,它首先通过用字符串结尾标记替换空格来修改字符串,然后打印它刚刚循环的单词。重复。循环退出后,它会打印第一个单词(因为第一个单词之前可能没有空格)。请注意,它会同时打印到标准输出和文件。
-
进行了必要的更改@bodo
-
this only has the first word how?因为第一个空格字符' '被替换为空终止符'\0'。当您打印 c 字符串时,操作在第一个空终止符处结束 -
哦好吧好吧。非常感谢。 @drescherjm