、这if判断里卖弄为什么还要有个i++,i++表示啥意思呢

这段简单的代码我很不理解,代码是用来判断输入了几个字符
中英文都算一个字符
这if判断里卖弄为什么还要有个i++,i++表示啥意思呢
另外for循环里面还有个strIn[i],还有这种写法吗?不都是i<某某吗?
请大家帮我解释一下

#include 
#include 
using std::string;
int main()
{
    string strIn;
    while(true)
    {
        std::cin>>strIn;
        int length=0;
        for (int i=0;strIn[i];i++)
        {
            if (strIn[i]<0)
            {
                i++;
            }
            length++;
        }
        std::cout<system("pause");
    }
    return 0;
}

这段代码的作用是统计输入字符串中的字符数,包括中文字符。下面我解释一下代码的执行过程和细节:有用请采纳!

string strIn;          // 定义一个string类型的变量strIn用于接收输入的字符串
while(true) {          //while(true)实现无限循环,直到遇到break或return语句才会跳出循环
    std::cin>>strIn;    // 从标准输入流中读入一行字符串,存放在strIn中
    int length=0;       // 定义一个整型变量length,用于统计字符数,初始值为0
    for (int i=0; strIn[i]; i++) {   //for循环遍历字符串strIn,i表示下标,初始值为0,循环条件是strIn[i]不为0
        if (strIn[i]<0) {            // 如果当前字符是中文字符(因为ASCII码表中英文字符都是正数),则i++,跳过下一个字节
            i++;                     
        }
        length++;                    // 统计字符数,每循环一次length加1
    }
    std::cout<<length;              // 输出字符数
    system("pause");                // 暂停屏幕输出,等待用户按任意键继续
}


其中,‘strIn[i]’表示字符串‘strIn中’下标为i的字符,这种写法在C++中是合法的,因为字符串也可以被看作是字符数组。‘strIn[i]’的值为0时,循环结束。在循环中,i++的作用是跳过中文字符,因为中文字符在UTF-8编码中占用两个字节,所以需要跳过下一个字节。i++的位置在if语句的内部,是因为只有当当前字符是中文字符时才需要跳过下一个字节。如果放在if语句的外部,会导致英文字符也被跳过。