如何用数组中的字符串查找特定字母

问题描述:

如何获得包含P或p的项目并返回此数组中出现的匹配数量?如何用数组中的字符串查找特定字母

  { SKU: 275, "Royal Gala Apples" }, 
      { SKU: 386, "Honeydew Melon"  }, 
      { SKU: 240, "Blueberries"   }, 
      { SKU: 916, "Seedless Grapes"  }, 
      { SKU: 385, "Pomegranate"   }, 
      { SKU: 495, "Banana"    }, 
      { SKU: 316, "Kiwifruit"   }, 
      { SKU: 355, "Chicken Alfredo"  }, 
      { SKU: 846, "Veal Parmigiana"  }, 
      { SKU: 359, "Beefsteak Pie"  }, 
      { SKU: 127, "Curry Chicken"  }, 
      { SKU: 238, "Tide Detergent"  }, 
      { SKU: 324, "Tide Liq. Pods"  }, 
      { SKU: 491, "Tide Powder Det." }, 
      { SKU: 538, "Lays Chips S&V"  }, 
      { SKU: 649, "Joe Org Chips"  }, 
      { SKU: 731, "Allen's Apple Juice" }, 
      { SKU: 984, "Coke 12 Pack"  }, 
      { SKU: 350, "Nestea 12 Pack"  }, 
      { SKU: 835, "7up 12 Pack"   } 
    }; 
+1

看手册页strpbrk()...这应该让你开始。如果你仍然有问题,发布您的代码,并要求您的具体问题。 – TonyB

这可能是一个简单的解决方案:

#include <stdio.h> 
#include <string.h> 

#define NPROD 6 
struct product { 
    int sku; 
    char *name; 
}; 

struct product products[NPROD] = { 
{ 275, "Royal Gala Apples" }, 
{ 386, "Honeydew Melon"  }, 
{ 240, "Blueberries"   }, 
{ 916, "Seedless Grapes"  }, 
{ 385, "Pomegranate"   }, 
{ 127, "Curry Chickens"  } 
}; 

int main() 
{ 
    int i, j, nfound; 
    nfound = 0; 
    for (i = 0; i < NPROD; i++) { 
     for (j = 0; j < (int)strlen(products[i].name); j++) { 
      if (products[i].name[j] == 'p' || 
       products[i].name[j] == 'P') { 
       /* Do whathever you want with this product */ 
       printf("%d %s\n", products[i].sku, 
         products[i].name); 
       nfound++; 
       break; 
      } 
     } 
    } 

    printf("found %d matching products\n", nfound); 
    return 0; 
} 

你也可以使用strpbrk()作为TonyB建议以取代内部的循环:

if (strpbrk("p", products[i].name) || 
    strpbrk("P", products[i].name)) { 
    /* Do whathever you want with this product */ 
    printf("%d %s\n", products[i].sku, products[i].name); 
    nfound++; 
} 

不过,我不是确定strbpbrk是如何实现的,但如果仅仅为字符串的大小执行for循环,我不会感到惊讶。在这种情况下,通过两次调用strbpbrk,这个解决方案的效率会比第一个解决方案低。可能有更好的解决方案,但我希望你明白了。 这是输出:

275 Royal Gala Apples 
916 Seedless Grapes 
385 Pomegranate 
found 3 matching products