【问题标题】:I don't know how to iterate through the elements of an array while reading them我不知道如何在读取数组元素时迭代它们
【发布时间】:2019-10-15 03:27:23
【问题描述】:

我正在尝试编写一个程序来查找给定字符串中的所有元音,但是我不知道如何让我的程序增加我的计数变量 (numVowels)

我一直在寻找“获取迭代数组的大小”等。但找不到任何特定于 C 的内容。

int num_vowels(char string[]){
    //int j;
    int i;
    int numVowels = 0;

    //iterate through string searching for vowels
    for(i = 0; i < sizeof(string); i++){

        //if any vowels found
        if (string[i] == 'a' ||string[i] == 'e' ||string[i] == 'i' ||string[i] 
        == 'o' ||string[i] == 'u'){

            //increase count
            numVowels++;
        }
    }
    //print count
    printf("Number of vowels: %d", numVowels);
    return 0;
}

输入工作正常,只是我无法让它打印元音,甚至无法确定它是否正在通过数组。

编辑:我知道,这是一个很长的 if 语句,我稍后会修复它

【问题讨论】:

  • 我觉得一切都很好,除了 sizeof(string) 没有按照你的想法做。
  • 也许用strlen(string)替换sizeof(string)
  • 在循环控制中使用条件string[i] != '\0'

标签: c arrays iteration


【解决方案1】:

当您编写“num_vowels(char string[])”时,您传递的不是字符串,而是字符数组“string”的第一个元素的地址(指针)。

因此,当您执行“sizeof(string)”时,结果将是字符指针的大小,根据体系结构可以是 4 或 8。

按照 cmets 的建议,您可以使用“strlen”,但请确保包含“string.h”标头.....解决方案是.....

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

int num_vowels(char string[]){

    int i;
    int numVowels = 0;

    //iterate through string searching for vowels
    for(i = 0; i < strlen(string); i++){ //use strlen(string)

    //if any vowels found
      if (string[i] == 'a' ||string[i] == 'e' ||string[i] == 'i' ||string[i] 
    == 'o' ||string[i] == 'u'){

         //increase count
         numVowels++;
      }
   }
  //print count
  printf("Number of vowels: %d", numVowels);

  return 0;
} 

或者您不需要使用“strlen”并直接取消引用指针.... 就这样……

int num_vowels(char string[]){

  int i;
  int numVowels = 0;

  //iterate through string searching for vowels
  for(; i = *string; string++){ //deference and increment pointer

    //if any vowels found
    if (i == 'a' || i == 'e' || i == 'i' || i 
    == 'o' || i == 'u'){

        //increase count
        numVowels++;
    }
  }
//print count
  printf("Number of vowels: %d", numVowels);

  return 0;
}

【讨论】:

    【解决方案2】:

    对减少条件if帮助不大

    #include <stdio.h>
    #include <string.h>
    
    int num_vowels(const char *string){
        int numVowels = 0;
        const char *wordToSearch = "aeiou";
    
        //loop on string
        for(int i = 0; i < strlen(string); i++) {
            //loop on wordToSearch
            for (int j = 0; j < strlen(wordToSearch); j++) {
                if (string[i] == wordToSearch[j]) {
                    numVowels++;
                }
            }
        }
        printf("Number of vowels: %d", numVowels);
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-11-22
      • 2011-06-01
      • 2013-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多