2012-12-03 58 views
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? )

+2

類型name'的'是不'char'。你應該更多地關注編譯器的錯誤信息。如果你這樣做,你會注意到這個類型是'char [80]',而不是'char'。 –

+0

因此,放鬆說我需要爲每個數字做一個循環?我該怎麼辦呢 – Koleto

回答

2

您需要循環在字符串的每個字符上,isalpha()僅測試單個字符。

+0

我該怎麼做呢......當我輸入「Koleto」時,該如何檢查...... – Koleto

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

「for(int j = 0; j Koleto

+0

我做了一個小改動(用'strlen(card [i] .name替換'strlen(name)'' )'..但是我不確定你在問什麼? – StevieG

1

不能將整個char陣列上使用isalpha,只對個別字符。要檢查在char陣列中的每個字符是字母,您可以使用std::all_of算法:如果你使用沒有必要的C++ 11的支持編譯

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

,你可以這樣做:

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

對不起,我無法理解那段代碼的含義 - 你能否在我的代碼中使用它(我試圖在我的代碼後面寫下它,但這裏有一些我不能太懂)感謝 – Koleto

+0

機會的錯誤是你沒有C++ 11的支持,或者你沒有啓用它。請嘗試使用修改。請確保您有''和''包括。 –