简体   繁体   中英

comparing two string arrays c++

I am validating a data file for a larger program. I am at the last portion of the code and am trying to make sure two separate arrays are "equal" to each other by the strings themselves. I have included my code of the latest try. Please forgive me as I have posted the whole function.

Here it is:

//
//  validateDataFile.cpp
//  P1
//
//  Created by xxxxxxx on 3/26/13.
//  Copyright (c) 2013 xxxxxxx. All rights reserved.
//

#include "p1.h"

void validateDataFile (string fileName) {
fstream file;
file.open (fileName.c_str());

if (file.is_open()) {
    unsigned int i, j, x = 0, y = 0, a;
    int flag = 0, check = 0;
    string fileData, word, strg[200];

    getline (file, fileData);

    for (i = 0; i < fileData.length(); i++) {
        if ((fileData[i] == ' ') || (fileData[i] < 48) || (fileData[i] > 57)) {
            cout << "fileData[i]: " << fileData[i] << endl;
            cout << "Incorrect DataFile!\nFirst line should contain a positive"
            " integer and no white space" << endl;
            return;
        }
    }

    int numberOfNodes = convertToInt(fileData);

    string list[numberOfNodes];

    if (numberOfNodes < 0) {
        cout << "Number of Nodes: " << numberOfNodes << endl;
        cout << "Incorrect DataFile!\nFirst character should be a positive"
        "integer" << endl;
        return;
    }

    getline (file, fileData);
    stringstream stream (fileData);

    while (getline (stream, word, ' ')) {
        list[x++] = word;

            for (a = 0; a < numberOfNodes; a++) {
                    cout << "list of nodes: " << list[a] << endl;   //testing only
            }
    }

    if (x != numberOfNodes) {
        cout << "Incorrect DataFile!\nList of strings has more strings than"
        " the number of nodes specified in the first line." << endl;
        return;
    }

    while (!file.eof()){
        getline (file, fileData);
        stringstream ss (fileData);

        while (getline (ss, word, ' ')) {


            if (convertToInt(word) < 0) {
                flag = 0;
                for (i = 0; i < y; i++) {
                    if (strg[i] == word) flag = 1;
                }

                if (flag == 0) strg[y++] = word;
            }
        }
    }

    for (i = 0; i < y; i++) {               //<- my problem starts here
        check = 0;
        for (j = 0; j < x; j++) {
            if (strg[i].compare (list[j]) == 0) {
                check = 1;                  //<- my problem ends here
                break;
            }
        }
    }
    if (check == 0) {
        cout << "Incorrect DataFile!\nStrings listed should match Node Strings" << endl;
        return;
    }
}
else {
    cout << "ERROR!\n DataFile not present." << endl;
    return;
}


file.close();

}

It compiles with no errors but doesn't do what I want it to.

I purposely changed my data file to create the error but for some reason it does not which tells me my comparison is incorrect.

Here is a small portion of my data file:

16
Cape Birmingham Boston Chicago Dallas Detroit KansasCity LosAngeles Memphis Minneapolis Omaha Orlando Richmond SanFrancisco Seattle StLouis 
Atlanta Chicago 718
Atlanta Dallas 781
Atlanta Orlando 439
Birmingham Atlanta 146
Birmingham Detroit 723
Birmingham Richmond 678
Boston Atlanta 1099
Boston Detroit 716
Boston Memphis 1311
Chicago Atlanta 718
Chicago Boston 983
Chicago KansasCity 526

I purposely changed the first city to "Cape" from "Atlanta." Can someone tell me my error and show me what needs to be done to correct it? Thanks!

You will only find a bad value if it is the last node you are checking against your list. You need to change your check loop to be something like this:

for (i = 0; i < y; i++) {               //<- my problem starts here
    check = 0;
    for (j = 0; j < x; j++) {
        if (strg[i].compare (list[j]) == 0) {
            check = 1;                  //<- my problem ends here
            break;
        }
    if( check == 0 ) // value not found, break out of verification loop to report this.
        break;
    }

This stops the validation as soon as an item being checked isn't in the list.

There's so much code a lot of people (like me) won't even start reading it. Try writing a shorter program that reproduces the problem.

Also I suggest you read http://www.cplusplus.com/reference/string/string/compare carefully.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM