c语言pat基础题L1058

img

img


我的代码出现问题,本题希望可以得到大家的指导,谢谢你的帮助!

供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    int  len, cnt, i, j;
    char str[1001] = { 0 };
    gets(str);
    for (i = 0, cnt = 0, len = strlen(str); i <= len; i++)
    {
        if (str[i] == '6')
            cnt++;
        else{
            if (cnt > 9)
                printf("27");
            else if (cnt > 3)
                printf("9");
            else{
                for(j = 0;j < cnt; j++)
                    printf("6");
            }
            cnt = 0;
            if (str[i])
                printf("%c", str[i]);
        }
    }
    return 0;
}

下面的参考链接,可以实现题目所求。

参考链接:

  • 基本算法是用循环进行逐字符扫描,用while可以以减少循环次数:当下一个字符也“6”时,直接下标+1😎

  • 代码运行效果截屏图片

    img

Python代码

#!/sur/bin/nve python
# coding: utf-8

def change6(string):
    ''' 替换字符串中的6 '''
    sixs = [] # 暂存连续6字符串的列表。
    temp = ''
    
    for i in range(len(string)-1):
        
        if string[i] == '6':
            temp += string[i]
            
            if string[i+1] == '6':
                continue 
            elif string[i+1] != '6':
                
                if len(temp) > 3:
                    sixs.append(temp)
                
                temp = ''
    
    if len(temp) > 3:
        sixs.append(temp+'6') # 添加句末6。

    for i in sixs[::-1]:
        l = len(i)
        new = '9' if 3 <= l <= 9 else '27' if l > 9 else ''
        string = string.replace(i, new)
    
    return string


if __name__ == '__main__':
    string = 'it is So 666 really 6666 what else can I say 6666666666'
    print(f"\n输入:\n{string}\n\n输出:\n{change6(string)}")


  • while 循环代码
def change64(string):
    ''' 替换字符串中的6 '''
    sixs = [] # 暂存连续6字符串的列表。
    k, l = 0, 1
    
    while k < len(string)-1:
        
        if string[k] == '6':
            
            if string[k+1] == '6':
                k += 1
                l += 1
                continue 
            elif string[k+1] != '6':
                
                if l > 3:
                    sixs.append(l)
                    l = 1
        k += 1
    
    if l > 3:
        sixs.append(l) # 添加句末6。
    
    sixs.sort(reverse=True) # 对6列表排逆序序。
    #input(sixs) # 调试代码用语句。
    for i in sixs:
        new = '9' if i <= 9 else '27'
        string = string.replace('6'*i, new)
        #print(string) # 调试代码用语句。
    return string


  • 用re模块的findall方法提取长度大于4的6字符串,算不算“投机取巧”哩😄

代码

#!/sur/bin/nve python
# coding: utf-8
import re


def change6(string):
    ''' 替换字符串中的6 '''
    sixs = sorted(re.findall(r'\d{4,}', string), key = lambda x: len(x), reverse=True) # re提取字符串中的连续6,并以长度排逆序。
    
    for i in sixs: # 遍历替换连续6。
        l = len(i)
        new = '27' if l > 9 else '9'
        string = string.replace(i, new)
    
    return string


if __name__ == '__main__':
    string = 'It is so 666 really 6666 what else can I say 6666666666.'
    print(f"\n输入:\n{string}\n\n输出:\n{change6(string)}")

【以下回答由 GPT 生成】

对于这个问题,我会尽力帮助你解决。请将你遇到问题的代码部分贴出来,我会尽快回复你。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^