字符比较中的错误

时间:2013-04-24 15:30:53

标签: c++ if-statement

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

1 个答案:

答案 0 :(得分: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] );