yuhang2020 发表于 2021-3-16 11:18:23

代码疑点求讲解 for( i=0;s[i];i++ )

本帖最后由 yuhang2020 于 2021-3-16 11:40 编辑

代码是求输入的字符串中 重复字符及出现的次数{:5_100:}

疑问1:for( i=0;s[ i ];i++ )这个循环什么意思呀,s[ i ]可以是条件吗?这是个ASCII值?为什么写 i>=97就报错
疑问2:carr++ ;这个没看懂是什么意思,感觉也是ASCII

#include<stdio.h>
int main()
{
    char s;
    int carr={0};
    int i;
    printf("input a string: ");
    gets(s);
    for( i=0;s[ i ];i++ )
    {
      int index=s[ i ];
      if ( index >=0 && index <= 127 )
            carr++ ;
    }
    for( i=0;i<128;i++ )
      if ( carr[ i ] > 1 )
            printf("%c:%d\n", i, carr[ i ] );
        return 0;
}

wp231957 发表于 2021-3-16 11:45:52

这不就是统计有哪些字符是重复的 并重复次数是多少

wp231957 发表于 2021-3-16 11:47:56

原理很简单
设置了几个盒子比如0-9a-zA-Z这就是62个盒子,每个盒子都用自己的码值做索引
开始时 清零   ,然后检索字符串时遇到码值与索引值相同 则自增
最后能统计出所有字符出现的频次,凡是大于等于2的 都打印出来

yuhang2020 发表于 2021-3-16 12:13:40

wp231957 发表于 2021-3-16 11:47
原理很简单
设置了几个盒子比如0-9a-zA-Z这就是62个盒子,每个盒子都用自己的码值做索引
开始时 清零   ...

感谢感谢!虽然大概是听懂一些了,但这个 for( i=0;s[ i ] ; i++),这里s[ i ] 是一个什么条件
还有这个carr [ index ]++又是代表了什么

yuhang2020 发表于 2021-3-16 13:01:39

已解决!
以下是我的理解:
s [ i ] 是一个界限,当输入一个apple,读完e,for循环就停止,类似于读到 '\0' 就结束。
index 的定义是为了取出 s [ i ] 的字符的ASCII值, carr [ index ] ++ 是记录哪一个值的覆盖次数。
例如apple的ASCII值是 97、112、112、108、101,那么只需要验证112就可以,看看是不是覆盖次数2,
后面的carr[ i ] 就是看看刚刚取到的ASCII有没有覆盖,然后112读出2次的结果。

wp231957 发表于 2021-3-16 13:01:47

yuhang2020 发表于 2021-3-16 12:13
感谢感谢!虽然大概是听懂一些了,但这个 for( i=0;s[ i ] ; i++),这里s[ i ] 是一个什么条件
还有这 ...

#include<stdio.h>
int main()
{
    char s={'\0'};   //这里是储存原始字符串的(待统计字符串)
    int carr={0};   //可见ascii码都是小于128的,这里全部初始为0,本题中就是每个ascii码值对应的频次为0
    int i;
    printf("input a string: ");
    gets(s);
    for( i=0;s!='\0';i++ )    //s就相当于 s!='\0'这是大神们的一种炫酷写法
    {
      int index=s[ i ];
      if ( index >=0 && index <= 127 )
            carr++ ;   //程序所有焦点或者核心 就这一句代码 ,这个自己细细体会
                              //简单举例,比如你输入E (E的ascii码值为69) 那么carr+=1 什么意思,自己琢磨一下
    }
    for( i=0;i<128;i++ )
      if ( carr[ i ] > 1 )
            printf("%c:%d\n", i, carr[ i ] );
      return 0;
}

yuhang2020 发表于 2021-3-16 13:04:23

wp231957 发表于 2021-3-16 13:01


非常感谢!!我已通过你的回复解决了此问题!
页: [1]
查看完整版本: 代码疑点求讲解 for( i=0;s[i];i++ )