[1397] | 1 | #include "stringArray.h"
|
---|
| 2 |
|
---|
| 3 | /**
|
---|
| 4 | * Constructor: create a new string array
|
---|
| 5 | */
|
---|
| 6 | stringArray::stringArray()
|
---|
| 7 | {
|
---|
| 8 | }
|
---|
| 9 |
|
---|
| 10 | stringArray::stringArray(char *instring, char *divider)
|
---|
| 11 | { char *parse, *next;
|
---|
| 12 | int count = 1;
|
---|
| 13 |
|
---|
| 14 | parse = instring;
|
---|
| 15 | while ((next = strstr(parse, divider)) != NULL)
|
---|
| 16 | { if (next != parse)
|
---|
| 17 | { string newString(parse, 0, next-parse);
|
---|
| 18 | this->array.push_back(newString);
|
---|
| 19 | }
|
---|
| 20 | parse = next + strlen(divider);
|
---|
| 21 | }
|
---|
| 22 | if (strlen(parse) > 0)
|
---|
| 23 | { string newString(parse);
|
---|
| 24 | this->array.push_back(parse);
|
---|
| 25 | }
|
---|
| 26 | }
|
---|
| 27 |
|
---|
[1673] | 28 | void stringArray::permitDuplication(bool permit)
|
---|
| 29 | { this->permitDups = permit;
|
---|
| 30 | }
|
---|
| 31 |
|
---|
[1397] | 32 | /**
|
---|
| 33 | * Add a new string to the array
|
---|
| 34 | */
|
---|
| 35 | void stringArray::add(string member)
|
---|
[1673] | 36 | { if (this->permitDups || !this->includes(member))
|
---|
[1397] | 37 | { this->array.push_back(member);
|
---|
| 38 | }
|
---|
| 39 | }
|
---|
| 40 |
|
---|
| 41 | void stringArray::add(char *member)
|
---|
| 42 | { string newString(member);
|
---|
| 43 | this->add(newString);
|
---|
| 44 | }
|
---|
| 45 |
|
---|
| 46 | void stringArray::add(stringArray &other)
|
---|
| 47 | { vector<string>::iterator here = other.array.begin();
|
---|
| 48 | vector<string>::iterator end = other.array.end();
|
---|
| 49 |
|
---|
| 50 | while (here != end)
|
---|
| 51 | { this->add(*here);
|
---|
| 52 | here ++;
|
---|
| 53 | }
|
---|
| 54 | for (int i = 0; i < other.size(); i ++)
|
---|
| 55 | { this->add(other[i]);
|
---|
| 56 | }
|
---|
| 57 | }
|
---|
| 58 |
|
---|
| 59 | /**
|
---|
[1475] | 60 | * Insert a string at a given location
|
---|
| 61 | */
|
---|
| 62 | void stringArray::insertAt(string s, unsigned int at)
|
---|
| 63 | { if (at >= this->size())
|
---|
| 64 | { this->add(s);
|
---|
| 65 | }
|
---|
| 66 | else
|
---|
| 67 | { this->array.insert(this->array.begin() + at, s);
|
---|
| 68 | }
|
---|
| 69 | }
|
---|
| 70 |
|
---|
| 71 | /**
|
---|
[1397] | 72 | * Remove a string from the array
|
---|
| 73 | */
|
---|
| 74 | void stringArray::remove(string member)
|
---|
| 75 | { int memberPos;
|
---|
| 76 |
|
---|
| 77 | memberPos = this->indexOf(member);
|
---|
| 78 | if (memberPos >= 0)
|
---|
| 79 | { this->array.erase(this->array.begin() + memberPos);
|
---|
| 80 | }
|
---|
| 81 | }
|
---|
| 82 |
|
---|
| 83 | void stringArray::remove(char *member)
|
---|
| 84 | { string removeMember(member);
|
---|
| 85 | this->remove(removeMember);
|
---|
| 86 | }
|
---|
| 87 |
|
---|
| 88 | /**
|
---|
| 89 | * Check if the array includes the given string
|
---|
| 90 | */
|
---|
| 91 | bool stringArray::includes(string member)
|
---|
| 92 | { return (this->indexOf(member) >= 0);
|
---|
| 93 | }
|
---|
| 94 |
|
---|
| 95 | bool stringArray::includes(char *member)
|
---|
| 96 | { return (this->indexOf(member) >= 0);
|
---|
| 97 | }
|
---|
| 98 |
|
---|
| 99 | /**
|
---|
| 100 | * Return an index of the location of the given string into the array.
|
---|
| 101 | * -1 indicates that it does not exist
|
---|
| 102 | */
|
---|
| 103 | int stringArray::indexOf(string member)
|
---|
| 104 | { vector<string>::iterator here = this->array.begin();
|
---|
| 105 | vector<string>::iterator end = this->array.end();
|
---|
| 106 |
|
---|
| 107 | int i = 0;
|
---|
| 108 | while (here != end)
|
---|
| 109 | { if (here->compare(member) == 0)
|
---|
| 110 | { return i;
|
---|
| 111 | }
|
---|
| 112 | here ++;
|
---|
| 113 | i ++;
|
---|
| 114 | }
|
---|
| 115 | return -1;
|
---|
| 116 | }
|
---|
| 117 |
|
---|
| 118 | int stringArray::indexOf(char *member)
|
---|
| 119 | { string memberString(member);
|
---|
| 120 | return this->indexOf(memberString);
|
---|
| 121 | }
|
---|
| 122 |
|
---|
| 123 | /**
|
---|
| 124 | * Write the array into a c string, separated by commas
|
---|
| 125 | */
|
---|
| 126 | int stringArray::writeToCString(char *buffer, char *divider, int bufflen)
|
---|
| 127 | { int i = 0;
|
---|
| 128 | vector<string>::iterator here = this->array.begin();
|
---|
| 129 | vector<string>::iterator end = this->array.end();
|
---|
| 130 | buffer[0] = '\0';
|
---|
| 131 |
|
---|
| 132 | while (here != end)
|
---|
| 133 | { const char *hereCString;
|
---|
| 134 |
|
---|
| 135 | hereCString = here->c_str();
|
---|
| 136 |
|
---|
| 137 | if ((strlen(hereCString) + (i > 0 ? 1 : 0)) >= bufflen)
|
---|
| 138 | break;
|
---|
| 139 |
|
---|
| 140 | if (i > 0)
|
---|
| 141 | { strcat(buffer, divider);
|
---|
| 142 | bufflen -= strlen(divider);
|
---|
| 143 | }
|
---|
| 144 | strcat(buffer, hereCString);
|
---|
| 145 | bufflen -= strlen(hereCString);
|
---|
| 146 | i ++;
|
---|
| 147 | here ++;
|
---|
| 148 | }
|
---|
| 149 | return i;
|
---|
| 150 | }
|
---|
| 151 |
|
---|
[1498] | 152 | string stringArray::toString(string separator)
|
---|
| 153 | { string reply;
|
---|
| 154 |
|
---|
| 155 | vector<string>::iterator here = this->array.begin();
|
---|
| 156 | vector<string>::iterator end = this->array.end();
|
---|
| 157 | while (here != end)
|
---|
| 158 | { if (here != this->array.begin())
|
---|
| 159 | { reply += separator;
|
---|
| 160 | }
|
---|
| 161 | reply += *here;
|
---|
| 162 | }
|
---|
| 163 | return reply;
|
---|
| 164 | }
|
---|
| 165 |
|
---|
[1397] | 166 | stringArray stringArray::words(char *buffer)
|
---|
| 167 | { stringArray reply;
|
---|
| 168 | unsigned int at = 0;
|
---|
| 169 | unsigned int start;
|
---|
| 170 |
|
---|
| 171 | while (buffer[at] != '\0' && buffer[at] <= ' ')
|
---|
| 172 | { at ++;
|
---|
| 173 | }
|
---|
| 174 |
|
---|
| 175 | while (buffer[at] != '\0')
|
---|
| 176 | { start = at;
|
---|
| 177 | while (buffer[at] > ' ' && buffer[at] != '\0')
|
---|
| 178 | { at ++;
|
---|
| 179 | }
|
---|
| 180 | string newWord(buffer, start, at - start);
|
---|
| 181 | reply.add(newWord);
|
---|
| 182 |
|
---|
| 183 | while (buffer[at] <= ' ' && buffer[at] != '\0')
|
---|
| 184 | { at ++;
|
---|
| 185 | }
|
---|
| 186 | }
|
---|
| 187 | return reply;
|
---|
| 188 | }
|
---|
| 189 |
|
---|
| 190 | string &stringArray::operator[] (const unsigned int a)
|
---|
| 191 | { return this->array[a];
|
---|
| 192 | }
|
---|
| 193 |
|
---|
| 194 | void stringArray::clear()
|
---|
| 195 | { this->array.empty();
|
---|
[1498] | 196 | this->array.erase(this->array.begin(), this->array.end());
|
---|
[1397] | 197 | }
|
---|
| 198 |
|
---|