简体   繁体   English

C ++中的数组字符串比较

[英]array string comparison in C++

Basically what my code does is compare the words in keywords.txt file with the words in the keywords array and shows error suggestions based on whether the distance between these words is 1 or 2 and when these two words are not the same. 基本上,我的代码所做的是将keyword.txt文件中的单词与keywords数组中的单词进行比较,并根据这些单词之间的距离是1还是2以及这两个单词不相同时显示错误建议。 * I am unable to figure out why it is still showing the suggestion for words that are the same * ? * 我无法弄清楚为什么仍然显示相同单词的建议 * Any suggestions? 有什么建议么?

Below is my code 下面是我的代码

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

int EditDistance(string word1, string word2);

int main ()
{
    //keywords provided.
    string keywords[24] ={"auto","break","case","char","const","continue","default","do","double","else","enum","extern","float","for","goto","if","int","long","return","short","struct","switch","void","while"};
    int loop=0; //short for loop for input
    string line; //this will contain the data read from the file
    int numLines = 0;
    string unused;
    int result;
    ifstream myfile ("keywords.txt"); //opening the file.

    string arr[200];
     if (myfile.is_open()) //if the file is open
    {
        while (! myfile.eof() ) //while the end of file is NOT reached
        {
            getline (myfile,line); //get one line from the file

            arr[loop] = line;
          //  cout << arr[loop] << endl; //and output it
            loop++;
        }
        myfile.close(); //closing the file
    }
    else cout << "Unable to open file"; //if the file is not open output
  /*
    for(int i=0;i<24;i++)
    {
        for(int j=0;j<loop;j++)
        {
        if(arr[j]==keywords[i])
            cout<<arr[j]<<" and "<<keywords[i]<<" match. "<<endl;

        }
    }*/

    cout<<endl<<endl;
    cout<<"################## ERROR SUGGESTIONS ################"<<endl;
    cout<<"#                                                   "<<endl;
    cout<<"#                                                   "<<endl;

    for(int i=0;i<24;i++)
    {
            for(int j=0;j<loop;j++)
        {

            result=EditDistance(arr[j],keywords[i]);
            if (result==1 || result==2 && (arr[j]!=keywords[i]))    
            cout<<"# Use "<<keywords[i]<<" instead of " <<arr[j]<<" ? "<<endl;


        }
    }
    cout<<"#                                                   "<<endl;

    cout<<"#"<<endl;
    cout<<"#####################################################"<<endl;
    system("pause");
    return 0;
}

int EditDistance(string word1, string word2)  //function to find the distance between two words.
{
    int i, j, l1, l2, m;
    l1 = word1.length();
    l2 = word2.length();
    vector< vector<int> > t(l1 + 1, vector<int>(l2 + 1));

    for (i = 0; i <= l1; i++)
        t[i][0] = i;
    for (i = 1; i <= l2; i++)
        t[0][i] = i;

    for (i = 1; i <= l1; i++)
    {
        for (j = 1; j <= l2; j++)
        {
            m = min(t[i-1][j], t[i][j-1]) + 1;
            t[i][j] = min(m, t[i-1][j-1] + (word1[i-1] == word2[j-1] ? 0 : 1));
        }
    }
    return t[l1][l2];
}

On the line 在线上

if (result==1 || result==2 && (arr[j]!=keywords[i]))    

You probably mean 你可能是说

if( (result==1 || result==2 ) && arr[j]!=keywords[i])    

The first version is the same as 第一个版本与

if (result==1 || (result==2 && arr[j]!=keywords[i]))   

So you will output if the result is 1 even if the word is correct. 因此,即使单词正确,您也将输出结果是否为1。 Which is not what you want. 这不是您想要的。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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