int Strcmp(const String* str1, const String* str2) { assert(string_ok(str1)); assert(string_ok(str2)); int i = 0, j = 0; if (i == str1->len - 1 && j < str2->len - 1) return LESS; if (i < str1->len - 1 && j == str2->len - 1) return MORE; if (i == str1->len - 1 && j == str2->len - 1 ) return EQUAL; for (;i < str1->len && j < str2->len;) { assert(i < str1->len && i >= 0); assert(j < str2->len && j >= 0); if (i == str1->len - 1 && j < str2->len - 1) return LESS; if (i < str1->len - 1 && j == str2->len - 1) return MORE; if (strchr(punct, str1->str[i])) i++; if (strchr(punct, str2->str[j])) j++; if ((!strchr(punct, str1->str[i])) && (!strchr(punct, str2->str[j]))) { if (str1->str[i] == str2->str[j]) { i++; j++; } else return str1->str[i] - str2->str[j]; } } if (i == str1->len - 1 && j == str2->len - 1 ) return EQUAL; }
int backStrcmp(const String* str1, const String* str2) { assert(string_ok(str1)); assert(string_ok(str2)); if (str1->len == 0 && str2->len > 0) return LESS; if (str1->len > 0 && str2->len == 0) return MORE; if (str1->len == 0 && str2->len == 0) return EQUAL; int i = str1->len - 1, j = str2->len - 1; for (; strchr(punct, str1->str[i]) && i > 0; i--); for (; strchr(punct, str2->str[i]) && j > 0; j--); for (;i != 0 && j != 0;) { assert(i < str1->len && i >=0); assert (j < str2->len && j >=0); if (strchr(punct, str1->str[i])) i--; if (strchr(punct, str2->str[j])) j--; if ((!strchr(punct, str1->str[i])) && (!strchr(punct, str2->str[j]))) { if (str1->str[i] == str2->str[j]) { i--; j--; } else return str1->str[i] - str2->str[j]; } } if (i == 0 && j > 0) return LESS; if (i > 0 && j == 0) return MORE; if (i == 0 && j == 0) return EQUAL; }
bool destructStr(String* This) { if (!string_ok(This)) { errno = EIDRM; return TEARS; } else { free(This->str); This->str = 0; This->len = -1; } return LUCKY; }
void print_possible_lines() { int line, j, k, off; char str[10]; for(line = 0; line < 9; line++) { // one for each sudoku line k = 0; off = offset(line); for(j = MIN_RANGE; j <= MAX_RANGE; j++) { sprintf(str, "%d", j); if(string_ok(line, str)) { strcpy(&potential[k*10 + (off*10)], str); k++; } } num_of_solutions[line] = k; } print_num_of_solutions(); print_potentials(); }
bool string_dump(String** text, size_t nStrings) { printf("# --String_dump <<\n"); for (int i = 0; i < nStrings; i++) { printf("text[%d]", i); if (string_ok(text[i])) printf("(ok)\n" "{\n" "str = <<%s>>\n" "len = %d\n" "}\n\n", text[i]->str, text[i]->len ); else { printf("BUG\n"); if (!text[i]) { printf("{\n" "pointer to text[%d] fault\n" "}\n\n", i); } if (!text[i]->str) { printf("{\n" "pointer to text[%d]->str fault\n" "}\n\n", i); } if (text[i]->len < 0) { printf("{\n" "size of len fault\n" "}\n\n"); } } } printf(">> End of dump"); return LUCKY; }