Сравнение массива символов в c ++ - PullRequest
0 голосов
/ 19 июня 2020

Мне нужна помощь в C ++. Я хочу сравнить массив символов. Итак, я немного написал код. К сожалению, всегда выходит ошибка. Я не могу запустить это. Здесь я прикрепил код. Пожалуйста, помогите мне исправить этот код. Я хочу проверить, является ли вывод, равным предложению 1, недействительным, но если он не равен предложению 1, то он действителен. Помоги мне, пожалуйста. Спасибо.

int number;
char sentence[number];
char rules[50];
char statement[50];
char premis1[100];
char premis2[100];
char conclusion[100];

cout<<"How many sentence you want to insert:";
cin>>number;
cout<<endl;

for(int i=0; i<number; i++)
{
    cout<<"Enter sentence ";
    cout<<i+1;
    cout<<":";
    cin>>sentence[i];
    cin.ignore();       
}

cout<<"Enter premis 1:";
cin.getline(premis1,100);
cin.ignore();
cout<<"Enter premis 2:";
cin.getline(premis2,100);
cin.ignore();


cout<<"Enter conclusion:";
cin.getline(conclusion,100);
cin.ignore();

for(int i=0;i<number;i++)
{
    if(strcmp(conclusion,sentence[0],)==0)
    {
        cout<<"Statement is invalid."<<endl;
        cout<<endl; 
    }
    else if(strcmp(conclusion,sentence[0])!=0)
    {
        cout<<"Statement is valid."<<endl;
    }
    else
        cout<<"exit"<<endl;         
}

1 Ответ

2 голосов
/ 19 июня 2020

Ваши ошибки, которые вы допустили в программе:

  1. Вы никогда не инициализировали number, но использовали в sentence[], все равно он недействителен даже после объявления number, потому что компилятор должен знать точное значение длины массива, которое будет определено.
  2. Вы определили sentence как массив символов, но из вашего кода кажется, что вы хотели сохранить полное предложение в каждом элементе массив, что невозможно. Используйте здесь std::string.
  3. Вы делаете strcmp() с первым символом массива char, а не с предложением с заключением.

В сторону: Пожалуйста, не забудьте включить важные файлы заголовков, которые являются общими для кода, и мы должны предполагать, что ваша программа неполная, потому что в ней отсутствуют main() и оператор (ы), например strcmp(...,...',' - incomplete).


Переработана программа (обратите внимание, что здесь используется оператор using namespace std, потому что это небольшая программа для демонстрации и для простоты и избавления от префиксов std:: повсюду):

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main(void) {
    int number = 0;
    vector<string> sentence;
    string tempSentence;
    string conclusion;

    cout << endl;
    cout << "How many sentences you want to insert? ";
    cin >> number;

    for (int i = 0; i < number; i++) {
        fflush(stdin);
        cout << "Enter sentence " << (i + 1) << ": ";
        getline(cin, tempSentence);

        sentence.push_back(tempSentence);
    }

    cout << "Enter conclusion: ";
    getline(cin, conclusion);

    if (conclusion == sentence[0])
        cout << "The statement is invalid." << endl;
    else if (conclusion != sentence[0]) 
        cout << "The statement is valid." << endl;
    else
        cout << "EXIT" << endl;

    return 0;
}

Здесь я взял std::vector<> из std::string, чтобы вставить одну строку в определенное количество предложений, заданных динамическим c способом на каждой итерации (из #include <vector>), и использовал std::string вместо char arr[], здесь легко сравнивать строки.

Пример вывода:

$ g++ -o prog prog.cpp; ./prog

How many sentences you want to insert? 3 // --- INPUT
Enter sentence 1: This is the first sentence.
Enter sentence 2: This is the second sentence.
Enter sentence 3: This is the third sentence.
Enter conclusion: This is NOT the first sentence.
The statement is valid.   // first sentence != conclusion // --- OUTPUT
...