找出含有某个字母的最长单词

怎么在一个英文句子中找出含有某个元素,且最长的单词(长度相同就输出前面的)
比如 :you are so nice
输出含有a的最长单词

以空格为分割遍历每个单词,在扫描到空格或EOF时对前一个单词做判断,如果该单词含有a则记录其起始位置与长度,全部扫描完毕后直接用起始位置和长度输出该单词即可,复杂度为O(n)

if(s[i]=='a')或strcmp(s[i],'a');
判断有没有a


#include <iostream>
#include <cstring>
#include <algorithm>
#include <sstream>
#include <cmath>
#include <cstdio>
using namespace std;
bool existchar(string s, char a)
{
    int sLen = s.length();
    for (int i = 0; i < sLen; i++)
    {
        if (s[i] == a)
        {
            return true;
        }
    }
    return false;
}

int main()
{
    string s;
    getline(cin, s);
    int sLen = s.length();
    int maxLen = 0, cl;
    string maxStr = "", cs;
    for (int i = 0; i < sLen; i++)
    {
        if (s[i] != ' ')
        {
            cs += s[i];
        }
        else
        {
            if (existchar(cs, 'a'))
            {
                cl = cs.length();
                if (cl > maxLen)
                {
                    maxLen = cl;
                    maxStr = cs;
                }
            }
            cs = "";
            cl = 0;
        }
    }
    if (existchar(cs, 'a'))
    {
        cl = cs.length();
        if (cl > maxLen)
        {
            maxLen = cl;
            maxStr = cs;
        }
    }

    cout<<maxStr<<endl;
    return 0;
}