肚子饿了233 发表于 2021-3-19 14:19:41

请大佬帮忙检查下这段代码!!!

void fun1(char* p1)//   p1[]={*****add***cc**}
{
        int i, j, m;
        for (i = 0; p1; i++);   //i用来遍历数组p1里的所有字符,即计数
        for (j = 0; p1 == '*' && j < i; j++);
        for (m = 0; j < i; j++)
        {
                p1 = p1;
                cout << p1;
        }
}

这是一个子函数,功能是消灭*****add***cc**的头部星星,其余字符保留。
但是我的代码运行出来的结果却只消灭了一个星星,应该消灭头部的5个星星,这是为啥呢?
(我用的是vs2019)

jackz007 发表于 2021-3-19 14:46:10

void fun1(char * p1)//   p1[]={*****add***cc**}
{
      int i , j                                 ;
      for(i = 0 ; p1 && p1 == '*' ; i ++)   ;
      for(j = i ; p1 ; j ++) p1 = p1 ;
      p1 = '\0'                            ;
}

肚子饿了233 发表于 2021-3-19 18:40:44

jackz007 发表于 2021-3-19 14:46


谢谢你写的新代码!我知道我哪里错了,第三个for循环里应该是j<=i;因为要将结束字符传入新数组。可是结束字符不是编译器自动在末尾加上的吗?如果没有结束字符,为啥会出现只消掉了一个星星的情况了呢?这种情况是随机的吗?

肚子饿了233 发表于 2021-3-19 19:16:20

jackz007 发表于 2021-3-19 14:46


诶?您把您刚刚的回复删了吗?我咋看不见了呢?
页: [1]
查看完整版本: 请大佬帮忙检查下这段代码!!!