2015-05-23 2 views
-3

У меня есть задание рассчитать количество гласных, заглавных букв, согласных и т. Д. В массив. Но я получаю ошибку :Ошибка: невозможно преобразовать 'char *' в 'char **' для аргумента '1' to 'int upper (char **)'

Error cannot convert 'char*' to 'char** ' for argument '1' to '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 ; 
} 
//===================================================================== 
+0

Сократите количество кода на ** ** минимальный пример, который воспроизводит проблему. В этом случае не должно быть более 10 строк. Также объясните, что именно вы не понимаете из сообщения об ошибке. – Mat

+0

'double wordCount (char * words)' имеет другую подпись, поскольку она была объявлена: 'double wordCount (char * []);' –

+0

Люди здесь любят помогать, да, но вы не можете просто поместить всю вашу программу на здесь и скажите «пожалуйста, скажите, почему это не работает». Можете ли вы, по крайней мере, указать номер строки, которая вызывает ошибку? А также попытайтесь построить минимальный пример, используя одну строку. Извините, что вы сейчас делаете, просто неуважительно к сообществу. – Cat

ответ

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; 
} 
+0

Если изменить на 'int upper (const char * words) {' прототипы также необходимо будет обновить, чтобы включить 'const' –

+0

@Matt McNabb Я думаю, что это уже написано в моем сообщении. –

+0

благодарит кучу, ты понятия не имеешь, насколько это для меня значит, я вытаскиваю свои волосы из разочарования за последнюю неделю за это. –