错误:无法将参数'1'的'char *'转换为'char **'为'int upper(char **)'

时间:2015-05-23 10:42:17

标签: c++ pointers char

我有一项任务来计算数组中的元音,大写字母,辅音等的数量。但我一直在接受 错误:

  

错误无法将参数'1'的'char *'转换为'char **'   'int upper(char **)'

我不知道为什么会收到此错误。

我的主要计划:

#include "stringCount.h"
using namespace std;

int main()
{
    const int SIZE = 1024;  // The maximum size of the C-string
    char cstring[SIZE];     
    char choice;        

    cout << "Enter a C-string of at most 1024 characters: ";
    cin.getline(cstring, SIZE); //Get a c-string

    // Display the Menu

   do
   {
      cout << "\tA) Count the number of vowels in the string\n";
      cout << "\tB) Count the number of consonants in the string\n";
      cout << "\tC) Count the number of uppercase alphabets in the string\n";
      cout << "\tD) Count the number of lowercase alphabets in the string\n";
      cout << "\tE) Count the number of alphabets in the string\n";
      cout << "\tF) Count the number of digits in the string\n";
      cout << "\tG) Find the average number character in each word of the string\n";
      cout << "\tH) Display the string with first letter of words capitalized\n";
      cout << "\tI) Enter a new string string\n";
      cout << "\tQ) Quit this program\n\n";

      cout << "\tEnter your choice (A - I) or Q: ";
      cin >> choice;

      while ((toupper(choice) < 'A' || toupper(choice) > 'I') && toupper(choice)!='Q')
      {
         cout << "\tEnter ONLY (A - I) or Q: ";
         cin >> choice;
      }

        // Process User's choice
      switch (toupper(choice))
      {
         case 'A':   cout << "The string has " << vowel(cstring) << " vowels." << endl;
                     break;
         case 'B':   cout << "The string has " << consonant(cstring) << " consonants." << endl;
                     break;
        case 'C':   cout << "There are " << upper(cstring) << " uppercase alphabets in the string." << endl;
                     break;
        case 'D':   cout << "There are " << lower(cstring) << " lowercase alphabets in the string." << endl;
                     break;
        case 'E':   cout << "There are " << alphabet(cstring) << " alphabets in the string." << endl;
                     break;
        case 'F':   cout << "There are " << digit(cstring) << " digits in the string." << endl;
                     break;
            case 'G':   cout << "There average number of letters per word in the string is " << wordCount(cstring) << "." << endl;
                     break;
            case 'H':   cout << "The capitalized string is: "  << endl;
                            capital(cstring);
                            cout << cstring << endl;
                     break;                     
         case 'I':   cin.get();
                     cout << "Enter a C-string of at most 1024 characters: ";
                     cin.getline(cstring, SIZE);
                     break; 
            case 'Q':       cout << "Goodbye!\n";
                     exit(EXIT_SUCCESS);
      }
   } while (toupper(choice) != 'Q');

    return 0;}

我的标题文件:

    #ifndef STRING_COUNT
    #define STRING_COUNT

    #include <iostream>
    #include <cstdlib>

    double wordCount(char *[]);
    void capital(char *[]);
    int vowel(char *[]);
    int consonant(char *[]);
    int upper(char *[]);
    int lower(char *[]);
    int alphabet(char *[]);
    int digit(char *[]);

    #endif

我的实施档案:

#include <iostream>
#include <cstdlib>
#include <cstring>
#include "stringCount.h"

double wordCount(char*words)
{
    int a, size, word=0 ;

    size = sizeof (words);

    for (a=0 ; a < size ; a++)
    {
         if (isspace(words[a]))
         {
            word++;
         }
    }
    return word+1;
}
//======================================================================
void capital(char * words)
{
    int i,  size ;

    size = sizeof (words);


    for (i=0 ; i < size ; i++)
    {
        if (isspace(words[i])&& isalpha(words[i+1]) )
        {
            words[i+1] = toupper(words[i+1]);
            i++;
        }
    }
}
//=====================================================================
int vowel(char * words)
{
    int a =0;
    int size, vowels=0 ;
    size =  sizeof(words);   

    for (a=0; a< size;  a++)

    {
        if( words[a]== 'a'|| words[a] == 'e' || words[a]== 'i' || words[a] == 'o' || words[a] == 'u' ||words[a]== 'A'|| words[a] == 'E' || words[a]== 'I' || words[a] == 'O' || words[a] == 'U')
        {
            vowels++;
        } 
    }
    return vowels;
}
//=====================================================================
int consonant(char * words)
{
    int i,  size,  cons =0;  
    size = sizeof(words);

      for (i = 0; i< size ; i++)
      {
        if (isalpha(words[i])&!( words[i]== 'a'|| words[i] == 'e' || words[i]== 'i' || words[i] == 'o' || words[i] == 'u' ||words[i]== 'A'|| words[i] == 'E' || words[i]== 'I' || words[i] == 'O' || words[i] == 'U'))
        {
            cons++ ;
        }

      } ;


     return cons; 
}
//====================================================================
int upper(char * words)
{

     int i,  size,  uppercase =0 ;

     size = sizeof(words);
     for (i = 0 ; i< size ; i++)
     {
        if (isupper(words[i]))
        {
            uppercase++;
        }
     }

     return uppercase;

}
//===============================================================
int lower(char * words)
{

     int i,  size,  lowercase =0 ;

     size = sizeof(words);
     for (i = 0 ; i< size ; i++)
     {
        if (islower(words[i]))
        {
            lowercase++;
        }
     }

     return lowercase;

}
//================================================================
int alphabet(char * words)
{
    int alphab =0;

    int i,  size;    
    size = sizeof(words);

      for (i = 0; i< size ; i++)
      {
        if (isalpha(words[i]))
        {
            alphab++ ;
        }

      }
    return alphab;
}
//=================================================================
int digit(char * words)
{
    int a,  size,  digi =0;
    size = sizeof(words);

    for (a=0 ; a < size ; a++)
    {
        if(isdigit(words[a]))
        {
            digi ++;
        }
    }
    return digi ;   
}
//=====================================================================

1 个答案:

答案 0 :(得分:1)

更改功能声明

int upper(char *[]);

int upper(char *);

甚至

int upper( const char * );

考虑到功能定义也是错误的

而不是

 size = sizeof(words);

你必须使用

 size = strlen(words);

同样适用于其他功能定义。

可以通过以下方式定义该功能

int upper( const char * words )
{
    int uppercase = 0 ;

    for ( const char *p = words; *p != '\0'; ++p )
    {
        if ( isupper( ( unsigned char )*p ) ) ++uppercase;
    }

    return uppercase;
}