将第一个字母作为单词中的最后一个字母

时间:2018-01-20 04:25:26

标签: c

我需要帮助旋转单词,以便输出最后的第一个字母。 我有一个名为flip.txt的文件

backpack
carpet
rotate

我希望能够输入./RotateWord< flip.txt(在终端中),它应该输出

ackpackb
arpetc
otater

我能够输出缺少第一个字母的单词。如何让它输出结尾的第一个字母?

继承我的代码

#include <stdio.h>
#define BUFFER_SIZE 81

int main(int argc, char **argv) {
char string[BUFFER_SIZE];

while(fgets(string, BUFFER_SIZE, stdin) > 0) {
  int numChars = 0;
  while(string[numChars] && string[numChars] != '\n')
     ++numChars;

  int i;
   for(i = 1; i < numChars; ++i){

       if (string[i] == '\n'){
           putchar(string[0]);
           putchar('\n');
       }
       else {
           putchar(string[i]);
       }
   }

   putchar('\n');

  fflush(stdout);
}



return 0;
}

3 个答案:

答案 0 :(得分:1)

您可以使用strcspn删除\n

string[strcspn(string,"\n")]=0;

如果要以这种方式打印字符串 - 请执行以下两行。 (您也可以将它合并为一行)。

printf("%s",string+1);
printf("%c\n",string[0]);

代码将是

while(fgets(string, BUFFER_SIZE, stdin) != NULL) {
  string[strcspn(string,"\n")]=0;
  printf("%s%c\n",string+1,string[0]);
  fflush(stdout);
}

为什么你的代码不起作用?

根据您的代码,if从不执行。所以你永远不会打印第一个字符。前一个loop只是在变量不符合\n时递增变量。然后在下一个循环中迭代它们 < numChars ,然后期望看到\n,现在情况不是这样。

更改您的代码

while(fgets(string, BUFFER_SIZE, stdin) != NULL) {

   for(int i = 1; string[i]; ++i){
       if (string[i] == '\n'){
           putchar(string[0]);
           putchar('\n');
       }
       else {
           putchar(string[i]);
       }
   }
   fflush(stdout);
}

之前您在每个打印的字符后放\n。它应该只在最后一个字符之后。

注意:

fgets返回char* - 如果出现错误,则返回NULL。因此,要检查fgets是否成功,您应该进行空检查。

答案 1 :(得分:1)

当你

时,你可能没有计算最后的'\ n'字符
while(string[numChars] && string[numChars] != '\n')
 ++numChars;

如果是这样,你永远不会打

      if (string[i] == '\n'){
       putchar(string[0]);
       putchar('\n');
   }

因为你的循环会提早停止。

答案 2 :(得分:0)

在for循环中运行

for(i=1,i<=numChars,i++)

这是因为if语句没有被执行,因为索引没有到达换行符。 因此完整的代码如下:

#include <stdio.h>
#define BUFFER_SIZE 81

int main(int argc, char **argv) {
char string[BUFFER_SIZE];

while(fgets(string, BUFFER_SIZE, stdin) > 0) {
  int numChars = 0;
  while(string[numChars] && string[numChars] != '\n')
     ++numChars;

  int i;
   for(i = 1; i <= numChars; ++i){

       if (string[i] == '\n'){
       putchar(string[0]);
       putchar('\n');
       }
       else {
       putchar(string[i]);
       }
   }

   //putchar('\n');

  fflush(stdout);
}



return 0;
}

也不需要额外的

putchar('\n');