我有一项任务来计算数组中的元音,大写字母,辅音等的数量。但我一直在接受 错误:
错误无法将参数'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 ;
}
//=====================================================================
答案 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;
}