计算字符串中辅音的数量

时间:2015-02-01 23:48:02

标签: c string indexof

另一个首发问题。

int counterConstant;
int x;


for(x = 0; x<20; x++){
if("bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSVWXYZ".IndexOf(tempString[x]) >= 0){
 counterConsonant++;
 }
}

但是我收到了一个错误:

"error: member reference base type 'char [42]' is not a structure or union"

我还有其他办法吗? (我在for内执行此操作,检查char上的每个string。)

4 个答案:

答案 0 :(得分:2)

C中没有对象,因此没有&#34;方法&#34;而且你不能在字符串文字上调用IndexOf。字符串只不过是C中的字符数组。

考虑到这一点,让我们看看如何实际循环字符串的字符:

for (const char *p = tempString; *p != '\0'; ++p) {
    /* loop body */
    char c = *p; // *p is the current letter
}

这将创建指向字符串第一个元素的指针,然后循环遍历以下所有字符,如果您真的更喜欢使用索引,则可以这样做

for (size_t i = 0, len = strlen(tempString); i < len; ++i) {
    char c = tempString[i];
}

至于检查每个字母的辅音,你可以写一个辅助功能

int is_consonant(char c) {
    c = tolower(c); // #include <ctype.h>
    if (!isalpha(c)) return 0; // if not a letter, return false
    switch (c) {
        case 'a':
        case 'e':
        case 'i':
        case 'o':
        case 'u':
            return 0;
        default:
            return 1;
    }
}

现在返回循环,使用此函数检查每个字符。

int consonant_count = 0; // the =0 is important!
for (const char *p = tempString; *p != '\0'; ++p) {
    if (is_consonant(*p)) {
        ++consonant_count;
    }
}

如果你没有初始化为0,那么consonant_count的初始值是不可预测的,所以请确保你这样做。

答案 1 :(得分:1)

如果您正在使用C(在标记中指定),strchr()方法用于搜索字符串中的字符,strstr()用于搜索字符串中的字符串。我们将在此使用strchr(),因为tempString[x]是一个字符。另外,不要忘记给你的int变量一个初始值。试试这段代码:

int main()
{
    int counterConsonant = 0;
    int x;
    const char* tempString = "12345678901234567890";

    for (x = 0; x<20; x++){
        if (strchr("bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSVWXYZ", tempString[x]) != NULL){
            counterConsonant++;
        }
    }
    return 0;
}

答案 2 :(得分:0)

char temp[20];
scanf("%s",temp);
int i,j, consonantsCounter=0;
char consonants[]={'b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z','B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','V','W','X','Y','Z'}
for(i=0;i<20;i++){
  for(j=0;j<(sizeof consonants) / (sizeof consonants[0]);j++){
   if(temp[i]==consonants[j]){
      consonantsCounter++;
   }
  }
}

答案 3 :(得分:0)

C是一种结构化的过程语言,因此它没有像“真正的”面向对象编程语言(如C#)那样的成员函数/方法。您可以使用下面strspnstrcspn的组合来分别根据预定义的辅音字符列表计算辅音和非辅音字符的序列:

#include <string.h>

size_t
count_consonants (const char *s)
{
  size_t n;
  size_t total = 0;
  const char *consonants = "bcdfghjklmnpqrstvwxyzBCDFGHJKLMNPQRSTVWXYZ";

  /* While we haven't reached the end of the string,
     execute the code in the body of the loop.  */
  while (*s != '\0')
    {
      /* Count the number of consonants starting at the current string position.  */
      n = strspn (s, consonants);

      /* Add the number of consonants counted to
         the total number of consonants found.  */
      total += n;

      /* Advance the character pointer to the next character
         that IS NOT a consonant, based on the number of consonants
         stored in `n'.  */
      s += n;

      /* Advance the character pointer to the next character
         that IS a consonant (`strcspn' = skip the characters in
         `s' that don't appear in `consonants').  */
      s += strcspn (s, consonants);
    }

  return total;
}