void stringReverse(char *s) {
char temp;
int i = 0;
int j = strlen(s) - 1;
while (i >= j)
{
temp = s[i];
s[i] = s[j]; //swap the characters
s[j] = temp;
i++;
j--;
}
}
这是函数stringReverse(char *s)
,其中我必须调用
int main(int argc, char *argv[])
{
FILE *in; /* file handle for input */
FILE *out; /* file handle for output */
char word[256]; /* char array to store words from input file */
/* read words from input file, print on separate lines to output file*/
while ( fscanf(in, " %s", word) != EOF )
{
out = stringReverse(char *word);
fprintf(out, "%s\n", word);
}
/* close input and output files */
fclose(in);
fclose(out);
return (EXIT_SUCCESS);
}
我很难理解我应该如何调用stringReverse
函数。我的计划是从文本文件中反转一个单词,并将其反向放在另一个空文件
答案 0 :(得分:0)
好的。我阅读了所有评论,但我没有足够的声誉来评论。所以我添加一个答案。
您的标签上写着不理解反转字符串。有两种方法可以反转字符串。
第一种方式:
输入:你好,你好吗
输出:你是如何嗨
第二种方式
输入:你好,你好吗
输出:uoy era woh iH
您的最终陈述表明您要撤消文件。
int main(int argc, char *argv[])
{
long loc;
FILE *in, *out;
char ch;
if(argc != 3) {
printf("Usage: revcopy <source> <destination>.\n");
exit(1);
}
if((in = fopen(argv[1], "rb")) == NULL) {
printf("Cannot open input file.\n");
exit(1);
}
if((out = fopen(argv[2], "wb"))==NULL) {
printf("Cannot open output file.\n");
exit(1);
}
/* find end of source file */
fseek(in, 0L, SEEK_END);
loc = ftell(in);
/* copy file in reverse order */
loc = loc-1; /* back up past end-of-file mark */
while(loc >= 0L) {
fseek(in, loc, SEEK_SET);
ch = fgetc(in);
fputc(ch, out);
loc--;
}
fclose(in);
fclose(out);
return 0;
}
上面的代码会给你第一种答案[“你是多么喜欢”] .. 如果你想进一步反转,你必须使用 stringReverseFunction 。
[我假设 s 是一个单词,它是一个实际参数, i 指向单词的开头, j 指向结尾这个词。然后它会工作正常]
答案 1 :(得分:0)
您可以使用fgets
将整个文件存储在字符串中,然后对其执行反向逻辑。
链接到 - &gt; fgets
的strrev类似这样的事情
#include <stdio.h>
#include <string.h>
char *strrev(char *str)
{
/* u can define your own logic here*/
char *p1, *p2;
if (! str || ! *str)
return str;
for (p1 = str, p2 = str + strlen(str) - 1; p2 > p1; ++p1, --p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
return str;
}
int main()
{
FILE *myFile;
char myTmpString [100];
char myInvertedString [110];
myFile = fopen ("input.txt" , "r");
if (myFile == NULL)
perror ("An Error Occured");
else {
fgets (myTmpString , 100 , myFile);
*myInvertedString = strrev (myTmpString);
puts (myTmpString);
fclose (myFile);
}
return 0;
}
答案 2 :(得分:0)
首先,您没有opened您想要阅读和写入的文件:
in = fopen("path_to_input_file", "r");
out = fopen("path_to_output_file", "w");
然后,您的stringReverse
函数的返回类型显示为void
。为什么要指定它返回out
?那是错的。
您的stringReverse
函数将反转字符串到位。因此,一旦在word
上调用该函数,变量的内容就会反转。
休息似乎没问题。