C++获取字符串中的最长单词

编写程序,求出所给出的字符串中最长的字母字串(以非字母隔开),例如,字符串”Apple$12pear watermelon $ # Banana“中最长的字母字串为"watermelon".

答:

#include<iostream>
#include<cstring>
#include<numeric>

using namespace std;

int main()
{
    ios::sync_with_stdio(false);//不用管
    cin.tie(nullptr);            //不用管

    int n = 0;
    int maxlen = 0;
    char t[100];
    char max[100];
    char s[100];
    cin.getline(s, 100);
    for (int i = 0; s[i-1]; i++)//当遍历到最后一项时如果也是字母 判断条件为s[i]则不会考虑最后一串单词。
    {                            //判断条件为s[i-1]时 可以遍历到'\0'所以会考虑最后一串单词。
        if (isalpha(s[i]))//isalpha()判断字符是否为字母 不是则返回0 头文件为numeric
        {
            t[n++] = s[i];
        }
        else
        {
            if (maxlen < n)
            {    
                int i;
                maxlen = n;
                for ( i = 0; i < n; i++)
                {
                    max[i] = t[i];
                }
                max[i] = '\0';//最长单词字符数组末尾加上'\0'
            }
            n = 0;//抽取一个单词后 不管长度是否比上一个单词大 临时储存的t字符数组的下标
                //都要初始化为0 .
        }
    }
    cout << max << endl;
    return 0;
}

#include <iostream>
#include <cstring>
using namespace std;
 
int main() {
    char s[512], *p = s, t[512], m[512];
    int len=0, max=0;
    gets(s);
 
    do {
        if ((*p>='a' && *p<='z') || (*p>='A' && *p<='Z')) {
            t[len++] = *p;
        } else {
            if (len>max) {
                t[len] = 0;
                strcpy(m, t);
                max = len;
            }
            len = 0;
        }
        p++;
    } while (*p!=0);
    if (len>max) {
        t[len] = 0;
        strcpy(m, t);
        max = len;
    }
 
    cout <<"-------------------" << endl;
    cout << m << endl;
    cout <<"-------------------" << endl;
 
    return 0;
}