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

Error: cannot convert 'char*' to 'char**' for argument '1' to 'int upper(char**)'

本文关键字:char 转换 int upper 参数 错误      更新时间:2023-10-16

我有一个任务来计算数组中元音,大写字母,辅音等的数量。但是我一直得到错误:

错误无法将参数'1'转换为'char** '"int上层(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 stringn";
      cout << "tB) Count the number of consonants in the stringn";
      cout << "tC) Count the number of uppercase alphabets in the stringn";
      cout << "tD) Count the number of lowercase alphabets in the stringn";
      cout << "tE) Count the number of alphabets in the stringn";
      cout << "tF) Count the number of digits in the stringn";
      cout << "tG) Find the average number character in each word of the stringn";
      cout << "tH) Display the string with first letter of words capitalizedn";
      cout << "tI) Enter a new string stringn";
      cout << "tQ) Quit this programnn";
      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;}

My header file:

    #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 ;   
}
//=====================================================================

修改函数声明

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 != ''; ++p )
    {
        if ( isupper( ( unsigned char )*p ) ) ++uppercase;
    }
    return uppercase;
}