2014-12-24 2 views
-3

Я пишу код, чтобы ввести несколько строк и сравнить длины строк, а затем напечатать более короткую строку для вывода на консоль. но код работает не так, как ожидалось, и при предоставлении любого набора входов вывод, который я получаю, представляет собой пустой экран (ни одна строка не отображается). Может ли кто-нибудь сказать мне, что я делаю неправильно?Почему мой код работает не так, как ожидалось?

input массив имеет строки, предоставленные пользователем, и эти строки также присутствуют в a, так что линия (string[i] == a[j]) будет выполняться с истинным для конкретного значения в a.

#include <iostream> 
#include <string.h> 
using namespace std; 

int main() 
{ 
    long n, m; 
    cin >> n >> m; 
    char a[m][10], b[m][10]; // will print the shorter out of these two 
    for (long i = 0; i < m; i++) cin >> a[i] >> b[i]; 
    char input[n][10]; 
    for (long i = 0; i < n; i++) cin >> input[i]; 
    for (long i = 0; i < n; i++) 
    { 
     for (long j = 0; j < m; j++) 
     { 
      if (input[i] == a[j]) // checks which set of a,b does this input correspond to 
      { 
       if (strlen(a[j]) > strlen(b[j])) cout << b[j]; 
       else cout << a[j]; 
       if (i < n - 1) cout << " "; 
      } 
     } 
    } 
} 

Я думаю, что что-то не так с кодом (input[i] == a[j]), но я не уверен, что.

+5

Поскольку это помечено как вопрос на C++, есть ли причина, по которой вы не используете 'std :: string'? – Adam27X

+1

Ваше название точно соответствует одной из причин «Голосовать, чтобы закрыть» .... – ravi

+0

.. потому что вы не отлаживали ее. Если бы вы сделали какую-нибудь отладку, вы бы рассказали нам о том, что узнали, не так ли? –

ответ

6

Проблема заключается в сравнении:

input[i] == a[j] 

сравнивает два указателей, а не струны.

Любое изменение использовать std::string или использовать std::strcmp.

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