2013-04-24 2 views
-4

программа не вводит оператор if, предположительно для ввода. Например, когда предложение1 является огужаном, а предложение2 является баграханом для первых символов, оно должно вводить первый, если выражение для конечной замены должно быть 4, но это не так.Ввод неправильного оператора If

#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]; 
    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++) { 

     if ((sentence1[i - 1] == 'a' || sentence1[i - 1] == 'u' || 
      sentence1[i - 1] == 'e' || sentence1[i - 1] == 'i' || 
      sentence1[i - 1] == 'o') && 
      (sentence2[j - 1] != 'a' || sentence2[j - 1] != 'u' || 
      sentence2[j - 1] != 'e' || sentence2[j - 1] != 'i' || 
      sentence2[j - 1] != 'o')) { 
     substitution = 4; 
     } 

     if ((sentence1[i - 1] != 'a' || sentence1[i - 1] != 'u' || 
      sentence1[i - 1] != 'e' || sentence1[i - 1] != 'i' || 
      sentence1[i - 1] != 'o') && 
      (sentence2[j - 1] == 'a' || sentence1[i - 1] != 'u' || 
      sentence1[i - 1] != 'e' || sentence1[i - 1] != 'i' || 
      sentence1[i - 1] != 'o')) { 
     substitution = 4; 
     } 

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

     if ((sentence1[i - 1] == 'a' || sentence1[i - 1] == 'u' || 
      sentence1[i - 1] == 'e' || sentence1[i - 1] == 'i' || 
      sentence1[i - 1] == 'o') && 
      (sentence2[j - 1] == 'a' || sentence2[j - 1] == 'u' || 
      sentence2[j - 1] == 'e' || sentence2[j - 1] == 'i' || 
      sentence2[j - 1] == 'o')) { 
     substitution = 3; 
     } 
     if ((sentence1[i - 1] != 'a' || sentence1[i - 1] != 'u' || 
      sentence1[i - 1] != 'e' || sentence1[i - 1] != 'i' || 
      sentence1[i - 1] != 'o') && 
      (sentence2[j - 1] != 'a' || sentence2[j - 1] != 'u' || 
      sentence2[j - 1] != 'e' || sentence2[j - 1] != 'i' || 
      sentence2[j - 1] != 'o')) { 
     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; 
    } 

    cout << sentence1[0]; 
    return 0; 
} 
+0

Вы отлаживали и видели значения обоих, когда это было сделано? Кроме того, что, если кто-то вводит более 49 символов? – chris

+8

Слишком много кода. Слишком мало времени. – mtahmed

+0

Как это должно работать? действительно ли это C++? 'int cost [m + 1] [n + 1];' какой компилятор вы используете gpp? – Kupto

ответ

7

Условием, как: sentence2[j-1]!='a'||sentence2[j-1]!='u' всегда верно - ни один символ не может быть равно как и au, поэтому один из них должен быть правдой.

Если вы используете !=, его почти всегда следует связывать &&, а не ||, в противном случае результат всегда будет правдой, независимо от ввода.

+3

подробнее см. Закон Де Моргана ... http: // en .wikipedia.org/вики/De_Morgan% 27s_laws – Kupto

Смежные вопросы