2015-09-22 4 views
-7

Благодарим всех вас за ваши комментарии. Я многое исправил. Теперь, когда я скомпилировать его, он дает мне ошибку на линии в основном, где я называю getPercent() это говорит:Сравнение двух массивов строк C++

error: cannot convert ‘std::string’ to ‘std::string*’ for argument ‘3’ 
     to ‘void getPercent(int, std::string*, std::string*, std::string*)’ 

Что это исправить?

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


string getYours() 
{ 
    cout << "Enter your DNA sequence: " ; 
    string sequence; 
    cin >> sequence; 
    return sequence; 

} 

int getNumber() 
{ 
    cout << "Enter the number of potential relatives: "; 
    int number; 
    cin >> number; 
    cout << endl; 
    return number; 

} 

void getNames(int number, string name[]) 
{ 

    for (int i = 0; i < number; i++) 
    { 
     cout << "Please enter the name of relative #" << i + 1 << ": "; 
     cin >> name[i]; 


    } 


} 

void getSequences(int number, string name[], string newsequence[]) 
{ 
    cout << endl; 

    for (int i = 0; i < number; i++) 
    { 
     cout << "Please enter the DNA sequence for " << name[i] << ": "; 
     cin >> newsequence[i]; 


    } 

} 

void getPercent(int number, string name[], string sequence[], 
       string newsequence[]) 
{ 
    cout << endl; 
    int count = 0; 
    for (int i = 0; i < number; i++) 
    { 

     if (sequence[i] == newsequence[i]) 
     count = count + 10; 
     cout << "Percent match for " << name[i] << ": " << count << "%"; 

    } 


} 

int main() 
{ 
    string sequence = getYours(); 
    int number = getNumber(); 
    string name[50]; 
    string newsequence[50]; 
    getNames(number, name); 
    getSequences(number, name, newsequence); 
    getPercent(number, name, sequence, newsequence); 
    return 0; 
} 
+0

Зачем использовать исходные массивы вместо 'std :: array' или' std :: vector' на первом месте? –

+0

Я еще не знал об этом, я работаю с тем, что знаю: 3 –

+0

Не уверен, что вы имеете в виду, но вы должны инициализировать свою переменную 'count' до 0 и использовать более высокий уровень предупреждения в вашем компиляторе. –

ответ

3

Несколько проблем:

  1. getYours() не имеет никаких побочных эффектов. Вероятно, вы хотели назначить строку sequence в main(), но вместо этого назначаете локальную переменную, которая будет уничтожена по мере ее выхода из области видимости.
  2. Ошибка проверки слишком большого количества элементов в ваших массивах (попробуйте использовать std::vector).
  3. Вы остановитесь на 10 в getPercent() вместо number элементов (если это то, что вы хотели).
  4. В getPercent(), count не инициализирован 0. Что-то кажется странным в логике в getPercent(), поэтому я не совсем уверен, что вы пытаетесь сделать.
  5. Аргументы sequence и newsequence в getPercent() на самом деле того же типа и будут компилироваться штрафом.

И, возможно, еще несколько вещей, которые я забыл.

+0

Хороший ответ. Хотя будьте подготовлены (и не разочарованы), чтобы потерять свои позиции вверх, когда вопрос будет удален. Я буду голосовать так, как только он будет закрыт. Этот вопрос не имеет значения для будущих исследований в его нынешней форме. –

+0

@ πάνταῥεῖ - Мех. Если я смогу помочь OP быть лучшим программистом, пусть будет так. – owacoder

+0

Хорошее отношение. Однако мы не личная служба поддержки. Сайт предназначен как хранилище для долгосрочных целей и представлений. Я был одним из фаворитов BTW.В любом случае, ответ на такие вопросы немного проблематичен, так как он помогает вампирам понять, что они могут прийти сюда, чтобы спросить (что определенно нежелательно). –

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