예제 #1
0
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;
}
예제 #2
0
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;
}
예제 #3
0
bool destructStr(String* This)
{
    if (!string_ok(This))
    {
        errno = EIDRM;
        return TEARS;

    }
    else
    {
        free(This->str);
        This->str = 0;
        This->len = -1;
    }

return LUCKY;
}
예제 #4
0
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();
}
예제 #5
0
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;
}