循环通过字符串条件

时间:2015-08-10 01:45:04

标签: arrays string for-loop

有人可以向我解释

的工作原理
  • for循环具有条件*(str + i)
  • 直到循环执行
  • count [i ++]和count [i] ++

    之间有什么区别
      void fillCharCounts(char *str, int *count)
      {
        int i;
        for (i = 0; *(str+i);  i++)
        {
          count[*(str+i)]++;
        }
      }
    

2 个答案:

答案 0 :(得分:1)

代码计算并将str的每个字母表的频率存储到整数数组count。执行此功能后,count[index]的频率为str[index]。让我解释一下你想知道的事情:

对于具有条件*(str + i)的循环:

*(str + i)等于str[i],它指的是str的第i个字符。字符指针的值递增以访问下一个索引的地址,然后取消引用该地址以获取指针str现在指向的索引值。

直到Loop执行的位置:

每个*(str+i)的循环都将继续,直到它在*(str+i)找到Null Terminator,即假设以下字符串:

char str[] = "abc";

str中存储的内容现在是abc \0,因此循环将一直执行,直到达到\0。条件*(str+i)基本上等于*(str+i) != '\0';

count [i ++]和count [i] ++之间有什么区别:

  • count[i++]等于*(count + i++)address在使用前count存储(count+i) count[i]++。这意味着一旦语句执行,*(count + i)++的值加1,count开始指向下一个索引。
  • value等于(count + i)*(count+i)count[*(str+i)]++; 指向的索引中存储的*(str+i)强加Post Increment。这意味着在执行此语句后,value的值增加1 BUT 计数仍然指向当前索引。

在你的情况下循环中使用的语句是:

(str+i)

应用Post Increment

  1. 首先执行valueindex存储在Post Increment指向的地址
  2. 现在count[index]将被用作*(count+index)点数,spring-config.xml将被强加给 <bean id="msgBean" class="com.example1.MessagesBean" init-method="start"> </bean> <bean name="carBean" class="com.example2.Car" init-method="initEngine"> <constructor-arg ref="engineBean" /> </bean> <bean id="engineBean" class="com.example2.Engine" /> ,这意味着Car.java的值会增加执行上述声明后的一个。
  3. 希望它现在已经清除了。

答案 1 :(得分:0)

此代码段计算str中找到的每个字符(不包括终止空字符)的出现次数,并将它们存储到count。当函数返回时,count充当字符到数字的映射。例如,count['a']是指'a'str的出现次数。 *(str + i)等于str[i],它引用C风格字符串i中的str个字符。因此循环一直持续到str引用的字符串的结尾(即,循环直到终止空字符'\0',其在布尔上下文中计算为false)。 count[*(str+i)]++;相当于count[str[i]]++;,它将字符str[i]的计数(出现次数)加1。 count[i++]count[i]++之间的差异与此代码段无关。