2013-07-29 69 views
0

我有一个程序当前正在读取单词中的一个变量* char wordlist [lengthOfArray];所以基本上它保留字符[10]。我可以计算出平均Word成功的长度,但我有我想打印比这个平均递归打印时间长于C计划中的平均单词

void printAverage(char *wordlist, int n, int average){ 
if (n > 0){ 
    if (strlen(wordlist[0]) > average){ 
     printf("%s\n", wordlist[0]); // Print the one longer than average then move on 
     printAverage(wordlist + 1, n-1, average); 
     } 
     else { 
      printAverage(wordlist+1, n-1, average); 
      } 
    } 
} 

我已经看过了网上看到什么是错的时间越长字的方法,但由于某些原因,比较 if(strlen(a [0])> average)没有正确地获取我的单词的值,并且给我错误 传递strlen的arg 1使得来自Integer的指针没有投射。

有没有人有任何想法我能如何正确地做到这一点?预先感谢任何帮助,我只是卡住了,我已经尝试了很多东西无济于事。

+2

哪里是 “一”,宣布? – LogicG8

+0

啊对不起,一个实际上是wordlist –

+0

只是修正了:) –

回答

0

您正在将wordlist声明为指向char的指针,而不是指向指向char的指针。 char是一个整数类型,所以当你将其解引用为wordlist [0]并将其传递给strlen()时,编译器会警告你传递一个整型而不是指针。

尝试:

void printAverage(char **wordlist, int n, int average) 
{ 
    if (n > 0){ 
    if (strlen(wordlist[0]) > average){ 
     printf("%s\n", wordlist[0]); // Print the one longer than average then move on 
    } 
    printAverage(wordlist + 1, n-1, average); 
    } 
} 
+0

只是给了它一个旋转,悲伤地说[警告]从不兼容的指针类型传递'printAverage'的arg 1。我正在从你在说的东西中学习:) –

+0

@KadinBoyle PrintAverage的哪一个调用是这么说的? –

+0

@JimBalter只是它的方法,因为它甚至被称为 –

1

您的变量wordlist不是一组单词 - 它是一个字符串。如果你有话数组它要么像这样的二维数组:

char *wordlist[] 

或者这样:

char wordlist[][10] 

或双指针这样的:

char **wordlist 

您需要根据您传递给它的实际数据设置参数。

+0

好的谢谢你的帮助,但我已经宣布了wordlist,正如你所说的char * wordlist []。我是否也需要将它作为* wordlist []传递? –

+0

@KadinBoyle这是一个奇怪的问题。当然这些类型必须匹配。你在wordlist [0]上做strlen和printf(“%s”),当然它必须是char *,而wordlist本身必须是一个指向char *的指针(声明为char * wordlist []'与将它声明为'char ** wordlist'相同)。传递的参数只是'wordlist'。 –

+0

@KadinBoyle如果你的函数外部的'wordlist'被声明为'char * wordlist [10]',那么当你调用函数时,你只需将它作为'wordlist'传递。 – paddy