0

使ってみましたが、

if(isalpha(card[i].name))
...

しかし、char型では使用できないと書かれていますここに私のコードがあります:これは構造体です:

struct firm {
unsigned egn;
char name[80];
char lastname[80];
char department[80];
unsigned salary;
}card[100];

これは、文字のみをチェックしてから続行する機能です。

void enter()
{
int i, n;
char temp[80];
do{
    cout<<"Enter how many workers you want to add: ";cin>>n;
}while(!(n>0 && n<101));
for(i=top;i<n;i++)
{/*ЕГН + проверка*/
    cout<<"Enter EGN: ";do{
    cin>>temp;
if((strlen(temp)!=10))
    cout<<"Enter EGN: ";
}while(strlen(temp)!=10);
card[i].egn = (unsigned) atoi (temp);
/*Име Фамилия*/
cout<<"Enter name(only letters): ";cin>>card[i].name;
cout<<"Enter lastname(only letters): ";cin>>card[i].lastname;
cout<<"Enter department: ";cin>>card[i].department;
cout<<"Enter salary: ";cin>>temp;
card[i].salary = (unsigned) atoi (temp);
}
}

この種のコードを使用しようとすると:

cout<<"Enter name(only letters): ";do{
cin>>card[i].name;
if(isalpha(card[i].name))
.....;

そして、intでcharを使用できないと書かれています(isalphaはintを使用していますか?)

4

3 に答える 3

2

文字列のすべての文字をループする必要がありisalpha()、単一の文字のみをテストします。

于 2012-12-03T11:20:43.743 に答える
1

配列isalpha全体では使用できず、個々の文字に対してのみ使用できます。char配列内のすべての文字がアルファベット順であることを確認するには、次のアルゴリズムcharを使用できます。std::all_of

auto name_begin = std::begin(card[i].name);
auto name_end = std::end(card[i].name);
bool name_alpha = std::all_of(name_begin, std::find(name_begin, name_end, '\0'), std::isalpha);
if (name_alpha) {
  std::cout << "It's alphabetical!" << std::endl;
}

必要な C++11 サポートなしでコンパイラを使用している場合は、次のことができます。

char* name_begin = card[i].name;
bool name_alpha = std::all_of(name_begin, name_begin+std::strlen(name_begin), std::isalpha);
if (name_alpha) {
  std::cout << "It's alphabetical!" << std::endl;
}

次に、標準ライブラリのアルゴリズムを使用しない退屈な方法:

bool name_alpha = true;
for (char* character = card[i].name; *character != '\0'; character++) {
  if (!std::isalpha(*character)) {
    name_alpha = false;
    break;
  }
}
if (name_alpha) {
  std::cout << "It's alphabetical!" << std::endl;
}
于 2012-12-03T11:34:17.133 に答える
0

問題は、名前自体が文字の配列であるため、各要素を次のようにテストする必要があることです。

.....
cout<<"Enter name(only letters): ";do{
cin>>card[i].name;
bool bIsAlpha = true;
for (int j = 0; j < strlen(card[i].name); ++j)
{
  if(!isalpha(card[i].name[j]))
  {
    bIsAlpha = false;
    break;
  }
}
if (bIsAlpha)
{
  .....;
}
于 2012-12-03T11:29:17.797 に答える