2013-04-24 73 views
0

switch語句後程序比較字符。在這個階段我已經調試過並看到字符串的第一個字符是111'o'而不是'o',這會導致我的程序失敗。我該如何解決問題或問題在哪裏?字符比較錯誤

#include <iostream> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 
#include <cmath> 

using namespace std; 


int main(){ 

char sentence1[50]; 
char sentence2[50]; 
int m,n,k,l; 
int i,j,substitution; 
cout<<"Enter the first word:"<<endl; 
cin>>sentence1; 
cout<<"Enter the second word:"<<endl; 
cin>>sentence2; 
m = strlen(sentence1); 
n = strlen(sentence2); 
int cost[m+1][n+1]; 
bool a1,a2; 
cost[0][0]=0; 

for(i=1;i<m+1;i++){ 
    cost[i][0]=cost[i-1][0]+2; 

} 
for(j=1;j<n+1;j++){ 
    cost[0][j]=cost[0][j-1]+2; 

    } 




for(i=1;i<m+1;i++){ 
    for(j=1;j<n+1;j++){ 

    switch (sentence1[i-1]){ 
    case 'a':a1=true; 
    case 'u':a1=true; 
    case 'e':a1=true; 
    case 'o':a1=true; 
    case 'i':a1=true; 
    default:a1=false; 
    } 
    switch (sentence2[j-1]){ 
    case 'a':a2=true; 
    case 'u':a2=true; 
    case 'e':a2=true; 
    case 'o':a2=true; 
    case 'i':a2=true; 
    default:a2=false; 

    } 
    if(sentence1[i-1]==sentence2[j-1]){substitution=0; 

    } 
    else if(a1==true && a2==false){substitution=4;} 
    else if(a1==false && a2==true){substitution=4;} 
    else if(a1==true && a2==true){substitution=3;} 
    else if(a1==false && a2==false){substitution=3;} 




     cost[i][j]=min(min(cost[i-1][j]+2,cost[i][j-1]+2),cost[i-1][j-1]+substitution); 
    } 
} 





for(i=0;i<m+1;i++){ 
    for(j=0;j<n+1;j++){ 

     cout<<cost[i][j]<<" "; 
    } 
    cout<<endl; 
} 



return 0; 
} 
+0

如何使用[strcmp](http://www.cplusplus.com/reference/cstring/strcmp/)檢查相等性?它並沒有真正的意義,因爲一個角色從來都不是「只是」。 – Kaiwa 2013-04-24 15:34:10

+0

呃..你的命名約定和編碼風格有點偏離。\ – 2013-04-24 15:34:11

+0

你可以編輯你的問題,只顯示幾行來證明問題嗎? – 2013-04-24 15:34:34

回答

7

switch statements "fallthrough"沒有break

switch (sentence1[i-1]){ 
case 'a':a1=true; break; 
case 'u':a1=true; break; 
case 'e':a1=true; break; 
case 'o':a1=true; break; 
case 'i':a1=true; break; 
default:a1=false; break; 
} 

由於此邏輯正在重複,請考慮將其提升爲其自身的功能。

bool is_a_vowel(char c) 
{ 
    switch (c){ 
    case 'a': 
    case 'u': 
    case 'e': 
    case 'o': 
    case 'i': 
    return true; 
    default: 
    return false; 
} 

現在,您可以擁有更具可讀性和一致性的代碼。

a1 = is_a_vowel(sentence1[i-1]); 
a2 = is_a_vowel(sentence2[j-1]); 
+0

哈,斑點。我甚至沒有看那麼遠。 – Kaiwa 2013-04-24 15:37:57