0

次のような2列の文字列としてファイルinput.txtから入力されます。

string1 string2
string3 string4
etc.

フォーム 0 から始まる昇順で文字列に番号を付けようとしていますが、繰り返し文字列に新しい値が割り当てられず、一度割り当てられた値を保持するようにしています。これを行うために set::find 操作を使用することにしましたが、機能させるのに苦労しています。これが私がこれまでに持っているものです:

int main(int argc, char* argv[]) { 

  std::ifstream myfile ("input.txt");
  std::string line;
  int num = 0;  // num is the total number of input strings

  if (myfile.is_open()) {      
      while(std::getline(myfile, line)) {
          ++num; 
      }
  }

  std::string str1, str1; // strings form input
  int str1Num, str2Num; // numbers assigned to strings

  int i = 0; // used to assign values to strings
  StringInt si;
  std::vector<StringInt> saveStringInts(num);
  std::set<std::string> alreadyCounted(num, 0); 
  std::set<std::string>::iterator sit;

  std::ifstream myfile2 ("input.txt");
  if (myfile2.is_open()) {      
      while(myfile2.good()) {
          // read in input, put it in vars below
          myfile2 >> str1 >> str2;

    // if strings are not already assigned numbers, assign them
    if ((*(sit = alreadyCounted.find(str1)).compare(str1) != 0) { // doesn't work
      str1Num = i++;
      alreadyCounted.insert(str1);
      saveStringInts.push_back(StringInt(str1Num));
    }
    else {
      str1Num = si->getNum(str1);
    }
    if ((*(sit = alreadyCounted.find(str2)).compare(str2) != 0) { 
      str2Num = i++;
      alreadyCounted.insert(str2);
      saveStringInts.push_back(StringInt(str2Num));
    }
    else {
      str2Num = si->getNum(str2);
    }

    // use str1 and str2 in the functions below before the next iteration


    }
  }

残念ながら、私は他のアプローチを試みましたが、今では完全に立ち往生しています。私のコードを修正する方法を知っているか、私の仕事を達成するためのより良い方法を提案できるなら、私はあなたの助けを大いに感謝します.

4

1 に答える 1