У меня есть задание рассчитать количество гласных, заглавных букв, согласных и т. Д. В массив. Но я получаю ошибку :Ошибка: невозможно преобразовать '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 ;
}
//=====================================================================
Сократите количество кода на ** ** минимальный пример, который воспроизводит проблему. В этом случае не должно быть более 10 строк. Также объясните, что именно вы не понимаете из сообщения об ошибке. – Mat
'double wordCount (char * words)' имеет другую подпись, поскольку она была объявлена: 'double wordCount (char * []);' –
Люди здесь любят помогать, да, но вы не можете просто поместить всю вашу программу на здесь и скажите «пожалуйста, скажите, почему это не работает». Можете ли вы, по крайней мере, указать номер строки, которая вызывает ошибку? А также попытайтесь построить минимальный пример, используя одну строку. Извините, что вы сейчас делаете, просто неуважительно к сообществу. – Cat