0

このプログラムの主な問題は、空白に遭遇した場合にカウントをデクリメントすることになっているにもかかわらず、文字列内の空白の数をカウントしないことです(カウントは文字列の長さに設定されています)。空白を正しくチェックしていませんか(''をチェックして)、または再帰の場合に何か問題がありますか?

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

// function to reverse string and count its length
int rPrint(char *str, int count)
{
   if(*str)
   {
       if(*str != ' ')   
           rPrint(str+1, count);
       else
           rPrint(str+1, count - 1);

       printf("%c", *str);
   }
   return count;
}

int main()
{
   char string[28] = "";
   int count = 0;

   printf("Please enter a string: ");
   gets(string);

   count = rPrint(string, strlen(string));

   printf("\nThe number of non-blank characters in the string is %d.", count);
}
4

2 に答える 2

2

再帰呼び出しの戻り値を使用していません。

   if(*str != ' ')
       rPrint(str+1, count);
   else
       rPrint(str+1, count - 1);

する必要があります

   if(*str != ' ')
       count = rPrint(str+1, count);
   else
       count = rPrint(str+1, count - 1);
于 2012-11-18T04:25:10.567 に答える
1

再帰すると、結果は破棄されます。試す

count = rPrint(str+1, count);

より一般的には、デバッグ方法として、printf()ステートメントを関数に入れて、それらが実行していることを出力する方法を学ぶ必要があります。

于 2012-11-18T04:25:33.610 に答える