Question : Will += work on CStrings?

See code below.  

IF I use CStrings everywhere instead of strings will the += in the printAllEqual function still work properly?

also, will the operator in cmpAttempts:

  if( left.studentName < right.studentName )

 still work properly?

(I know it's not advised to use CStrings but I'm doing this out of convenience thanks)
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
#include <iomanip>
#include <iostream>
#include <string>
#include <set>
#include <vector>
#include <algorithm>

using namespace std;

struct StudentAttempt
{
   int distance;
   string studentName;
};

bool cmpAttempts(StudentAttempt left, StudentAttempt right) {
   if( left.distance < right.distance ) {
      return true;
   }
   else if( left.distance == right.distance ) {
      if( left.studentName < right.studentName ) {
         return true;
      }
      else
         return false;
   }
   else
      return false;
}

bool isDistEqual( StudentAttempt left, StudentAttempt right) {
   return ( left.distance == right.distance
      && left.studentName != right.studentName );
}

size_t printAllEqual(const vector<StudentAttempt>& v, const StudentAttempt& sa, string& str ) {

  vector<StudentAttempt>::const_iterator i = v.begin();
  size_t sz = 0;

  while (i != v.end()) {

    if(isDistEqual(*i,sa)) {
    
      str += i->studentName;
      ++sz;
    }

    ++i;
  }

  return sz;
}

int main() {

   StudentAttempt throwDist[] = {
      {50, "A"},      {22, "A"},      {16, "B"},      {44, "C"},
      {33, "D"},      {34, "E"},      {22, "F"},      {21, "G"},
      {49, "A"},      { 5, "B"},      { 2, "C"},      {22, "A"},
      {33, "B"},      {22, "C"},      {22, "D"},      {44, "E"},
   };

   set<int> handled;

   int len = sizeof( throwDist )/ sizeof( throwDist[0] );
   vector<StudentAttempt> dist(throwDist, throwDist + len);
   vector<StudentAttempt>::iterator it = dist.begin();

   sort( dist.begin(), dist.end(), cmpAttempts);

   for( ; it != dist.end(); it++ ) {

      string str;

      pair<set<int>::iterator,bool> p = handled.insert(it->distance);

      if (!p.second) continue; // already handled

      if(0 < printAllEqual(dist,*it,str)) {

        cout << setw(2) << (*it).distance << " feet:  " << (*it).studentName << str << endl;
      }
   }

   
}

Answer : Will += work on CStrings?

ok, I think you have a pure C++ project which doesn't use MFC - since CString is a MFC class these errors occur.
Random Solutions  
 
programming4us programming4us