strlen使用出错

问题遇到的现象和发生背景

02:找第一个只出现一次的字符
总时间限制: 1000ms 内存限制: 65536kB
描述
给定一个只包含小写字母的字符串,请你找到第一个仅出现一次的字符。如果没有,输出no。

输入
一个字符串,长度小于100000。
输出
输出第一个仅出现一次的字符,若没有则输出no。
样例输入
abcabd
样例输出
c

问题相关代码,请勿粘贴截图
#include

using namespace std;

string s;
char c[strlen(s.c_str())]={0};
int a[strlen(s.c_str())]={0};

int cz(int x)
{
    for(int i=0;i<strlen(s.c_str());i++)
    {
        if(c[i]==x)
        {
            return i;
        }
    }
    return -1;
}

int sc()
{
    for(int i=0;i<strlen(s.c_str());i++)
    {
        if(a[i]==1)
        {
            cout<return 0;
        }
    }
    cout<<"no";
    return 0;
}

int main()
{
    getline(cin,s);
    int z,g=0;
    for(int i=0;i<strlen(s.c_str());i++)
    {
        if(cz(s[i])==-1);
        {
            c[g]=s[i];
            a[g]=1;
            g++;
            continue;
        }
        else
        {
            a[cz(s[i])]++;
        }
    }
    sc();
    return 0;
}

运行结果及报错内容

array bound is not an integer constant before ']' token

数组长度需要指定常量
题目中已经约定:一个字符串,长度小于100000
那么就char a[100001] = {0}可以了

emmmm 你这里的strlen用法有问题啊,你可以关注一下这些相关的长度函数 sizeof(),strlen(), length()这些长度都是怎样的,以及求得什么东东

你看下面,strlen(s.c_str())求得得长度是0,那么你规划得这个数组大小是0.。。。

img

直接用string不行?非得再改成数组?直接用string::size()