鱼C论坛

 找回密码
 立即注册
查看: 2015|回复: 11

求一句英语中的最长一段单词,例eesssccccc输出cccccc

[复制链接]
发表于 2021-12-16 21:48:10 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 小黄练编程 于 2021-12-17 13:21 编辑

#include<stdio.h>
#include<string.h>
main()
{
        int n,i,c=0,maxlen,len;
        char s[900],b[900],j[100];
        gets(s);
        n=strlen(s);
        len=0;
        for(i=0;i<n;i++)
        {
               
                if(s[i]!=s[i+1])//s为s【i】
                {
                        len=i-len;
                j[c]=i;//想法,将每段开头位子,设为一个元素,保存在数组j[]中,感觉这里出了问题,不会将每段开头,i值保存下来。
                    b[c]=len;//上同。
                    c++;
                }
        }
        maxlen=b[0];
        for(i=0;i<c;i++)
        {
                if(b[i]>maxlen)//b为b【i】
                        maxlen=b[i];//这里b是b【i】,
        }
    printf("maxlen=%d\n",maxlen);
        for(i=0;i<c;i++)
        {
                if(j[c+1]-j[c]==maxlen)//想法:求出开头位置。
                {
                        for(i=j[c];i<j[c]+maxlen;i++)
                    printf("%c",s[i]);//s为s【i】
                }
        }
}
数不出结果。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-12-16 22:21:03 | 显示全部楼层
#include <stdio.h>
#include <string.h>

int main(){
    char str[256], res[256] = {0}, c = '\0';
    int n = 0;
    
    fgets(str, 256, stdin);
    int N = strlen(str);
    str[(N--)-1] = '\0';
    
    for(int i = 0; i < N; i++){
        if(i == N-1 && c == str[i]) res[(int)c] = ++n > res[(int)c] ? n : res[(int)c];
        else if(c == str[i]) n++;
        else{
            res[(int)c] = n > res[(int)c] ? n : res[(int)c];
            n = 1;
            c = str[i];
        }
    }
    
    n = 0; c = '\0';
    for(int i = 0; i < 256; i++) if(res[i] > n) n = res[c = i];
    
    printf("%c", c);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-17 12:24:05 | 显示全部楼层

只能输出最长那串的一个字母,并不能输出一整串。最要命的是,我是学的真的少,连完全看明白都费劲,,我复制时这里说错了,把后面for的int删了才有用。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-17 12:37:29 From FishC Mobile | 显示全部楼层
小黄练编程 发表于 2021-12-17 12:24
只能输出最长那串的一个字母,并不能输出一整串。最要命的是,我是学的真的少,连完 ...


我以为你是想要输出一个字符,如果想输出最长相同字符的子字符串代码改一点就好了:
#include <stdio.h>
#include <string.h>

int main(){
    char str[256], res[256] = {0}, c = '\0';
    int n = 0;
    
    fgets(str, 256, stdin);
    int N = strlen(str);
    str[(N--)-1] = '\0';
    
    for(int i = 0; i < N; i++){
        if(i == N-1 && c == str[i]) res[(int)c] = ++n > res[(int)c] ? n : res[(int)c];
        else if(c == str[i]) n++;
        else{
            res[(int)c] = n > res[(int)c] ? n : res[(int)c];
            n = 1;
            c = str[i];
        }
    }
    
    n = 0; c = '\0';
    for(int i = 0; i < 256; i++) if(res[i] > n) n = res[c = i];
    
        char ans[n];
        for(int i = 0; i < n; i++)
        ans[i] = c;
        
    printf("%s", ans);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-17 12:56:53 | 显示全部楼层
傻眼貓咪 发表于 2021-12-17 12:37
我以为你是想要输出一个字符,如果想输出最长相同字符的子字符串代码改一点就好了:

那你感觉我上面思路错的很离谱吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-17 13:04:19 From FishC Mobile | 显示全部楼层
我不知道会不会离谱,但代码千百种,不同的程序员思路各不同,没有对或错,这题有我能解答,下一题有可能你能解答,而我不能,这是因为每个人的思路不同,所以需要多做、多看。(这样就能累积经验,所谓的经验,就是思路。自己一个人思路有限,一万个人的思路是无限的)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-17 13:23:19 | 显示全部楼层
傻眼貓咪 发表于 2021-12-17 13:04
我不知道会不会离谱,但代码千百种,不同的程序员思路各不同,没有对或错,这题有我能解答,下一题有可能你 ...

我刚改了,但还是输不出结果,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-17 16:43:12 | 显示全部楼层
我的会是这样:
#include<stdio.h>
#include<string.h>

int main()
{
    int input_len,len = 1,max_len = 1;
    char flag = '\0',target = '\0';
    char input[256] = {0};

    fgets(input,256,stdin);
    input_len = strlen(input);

    for(int i = 0;i < input_len;i++)
    {
        flag = input[i];
        if (flag == input[i+1])
        {
            len++;
            if(len > max_len)
            {
                max_len = len;
                target = flag;
            }
        }else{
            len = 1;
        }
    }

    for(int j = 0;j < max_len;j++)
    {
        printf("%c",target);
    }
    printf("\n");

    return 0;
}
你看看是否对你有帮助:我这里是取巧了,遍历原字符串的每一个字符,当遇到更长的同字符串时,就更新对应的字符和长度
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-17 17:49:28 | 显示全部楼层
本帖最后由 小黄练编程 于 2021-12-17 17:51 编辑
如来神掌 发表于 2021-12-17 16:43
我的会是这样:

你看看是否对你有帮助:我这里是取巧了,遍历原字符串的每一个字符,当遇到更长的同字符 ...


偶买噶,我人麻了,我想了老半天才发现,你这target是代表最长一段中一个字母,然后循环输出。,我还以为是个数组,在想怎么回事。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-17 17:53:29 | 显示全部楼层
如来神掌 发表于 2021-12-17 16:43
我的会是这样:

你看看是否对你有帮助:我这里是取巧了,遍历原字符串的每一个字符,当遇到更长的同字符 ...

为何前面要加flag=‘0’,tagert=‘0’,可以删了吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-17 18:46:19 | 显示全部楼层
如来神掌 发表于 2021-12-17 16:43
我的会是这样:

你看看是否对你有帮助:我这里是取巧了,遍历原字符串的每一个字符,当遇到更长的同字符 ...

谢谢,搞懂了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-12-20 09:52:21 | 显示全部楼层
本帖最后由 如来神掌 于 2021-12-20 09:53 编辑
小黄练编程 发表于 2021-12-17 17:53
为何前面要加flag=‘0’,tagert=‘0’,可以删了吗?。


其实这是为了清空对应的变量内容,不加也是可以的,最好是加上,因为这样可以在系统分配内存的时候清空原本有可能在该存储空间中的未清除干净的无用数据,同时我用的是'\0',不是‘0’,你看看ASCII码表就知道了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-9 16:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表