Проблемы с доступом к символу *** - PullRequest
0 голосов
/ 08 марта 2011

Я пытаюсь получить доступ к символу * в strcasestr, и это, кажется, не имеет никакого эффекта. Вот код:

#define NUMOFADDTYPES 5

const char* milkAdditions[] = {"Cream", "Half-and-half", "Whole-Milk", 
                   "Part-skim", "skim", "non-dairy", NULL};
const char* syrupAdditions[] = {"Vanilla", "Almond", "Raspberry", NULL};
const char* sweetenerAdditions[] = {"white-sugar", "sweetener", 
                    "Raw-cane", "honey", NULL};
const char* spiceAdditions[] = {"Cinnamon", "cardamon", NULL};
const char* alcoholAdditions[] = {"Brandy", "Rum", "Whiskey", 
                  "Aquavit", "Kahlua", NULL};

const char** additions[] = {milkAdditions, syrupAdditions, 
                sweetenerAdditions, spiceAdditions, 
                alcoholAdditions};



  char *ptr;
  int i, j;

  printf("Dump of additions[j][i]\n");
  for(j = 0; j < NUMOFADDTYPES; j++)
    {
      for(i = 0; (additions[j])[i] != NULL; i++)
    {
      printf("%d %d\t%s\n", j, i, additions[j][i]);
      if((ptr = strcasestr((additions[j])[i], string)) != NULL)
      {
        ptr += strlen((additions[j])[i]);
        getVolume(ptr);
      }
    }

Выход:

Dump of additions[j][i]
0 0 Cream
0 1 Half-and-half
0 2 Whole-Milk
0 3 Part-skim
0 4 skim
0 5 non-dairy
1 0 Vanilla
1 1 Almond
1 2 Raspberry
2 0 white-sugar
2 1 sweetener
2 2 Raw-cane
2 3 honey
3 0 Cinnamon
3 1 cardamon
4 0 Brandy
4 1 Rum
4 2 Whiskey
4 3 Aquavit
4 4 Kahlua

любая помощь будет принята с благодарностью

Редактировать:

извините, не добавил

  char string[] = "AcceptAdditions: Cream;lots white-sugar;dash\r\n\r\n";
  getAddition(string);

Решено

Ответы [ 3 ]

0 голосов
/ 08 марта 2011

Извините, ребята, я неправильно прочитал справочную страницу и искал подстроку с основной строкой

char *strcasestr(const char *haystack, const char *needle);

Спасибо за ответы в любом случае

0 голосов
/ 08 марта 2011

После редактирования:


Вы сравниваете каждое из значений "Cream", "Half and half", ... "Kahlua" с "AcceptAdditions: Cream; много белого сахара; тире \ r \ n \ r \ n".

strcasestr никогда не найдет совпадений!

Я думаю, что вы хотите разбить вашу строку на более мелкие части и проверить мелкие детали.

char string[] = "AcceptAdditions: Cream;lots white-sugar;dash\r\n\r\n";
const char *accepted[] = {"cream", "white-sugar", "dash"};

, а затем сверять каждый элемент с каждым принятым элементом

      for (int k = 0; k < sizeof accepted / sizeof *accepted; k++) {
          if ((ptr = strcasestr((additions[j])[i], accepted[k])) != NULL)
          {
            //ptr += strlen((additions[j])[i]);
            getVolume(ptr);
          }
      }
0 голосов
/ 08 марта 2011

<code>
char *strcasestr(const char *haystack, const char *needle);

Функция strcasestr () находит первое вхождение иглы подстроки в стоге сена.

Итак, разве это не должно быть

<code>strcasestr(string, (additions[j])[i])

вместо

<code>strcasestr((additions[j])[i], string)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...