c语言pat基础题0826L1059

img

img


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

供参考:

#include <stdio.h>
#include <string.h>
int main()
{
    char str[21][101];
    int  i, j, N, flg = 0, blk;
    scanf("%d",&N);
    getchar();
    for(i = 0;i < N; i++)
        gets(str[i]);
    for(i = 0;i < N; i++)
    {
        for(j = 0, flg = 0; str[i][j]; j++)
        {
            if(str[i][j] == ',' || str[i][j] == '.'){
                if(str[i][j-1] == 'g' && str[i][j-2] == 'n' && str[i][j-3] == 'o')
                    flg++;
            }
            if (flg == 2){
                for (blk = 0, j; blk < 3; j--)
                    if (str[i][j] == ' ') blk++;
                str[i][++j] = '\0';
                strcat(str[i], " qiao ben zhong.");
                break;
            }
        }
        if(flg == 2)
            printf("%s",str[i]);
        else
            printf("Skipped");
        if (i < N - 1) printf("\n");
    }
    return 0;
}

  • 算法:
    1、按行拆分输入,按逗号拆分行,按空格拆分字。
    2、判定押韵:押ong韵,糟改后拼接输出;否则输出Skipped。

  • 我仅会点Python,就用python代码走走“算法”
    代码运行效果截屏图片

    img

代码

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

def anyChange(text):
    ''' 糟改诗词 '''
    text = text.split('\n') # 按行拆分输入文本。
    n, text = int(text[0]), text[1:]
    result = []
    
    for i in range(n):
        i = text[i].split(',') # 逗号拆分行。
        a, b = i[0].split(), i[-1][:-1].split() # 拆分诗词前后字。
        
        if a[-1][-3:] == b[-1][-3:] == 'ong':
            b[-3], b[-2], b[-1] = 'qiao ben zhong'.split()
            result.append(f"{' '.join(a)},{' '.join(b)}.")
        else:
             result.append('Skipped')
    
    return '\n'.join(result)


if __name__ == '__main__':
    text = '''5
xun zhang zhai ju lao diao chong, xiao yue dang lian gua yu gong .
tian sheng WO cai bi you yong, qian jin san jin huan fu lai.
xue zhui roU zhi leng wei rong, an xiao chen jing shu wei long.
ZUO ye xing chen ZUO ye feng, hua lou xi pan gui tang dong .
ren xian gui hua luo, ye jing chun shan kong .'''
    print(f"\n输入:\n{text}\n\n输出:\n{anyChange(text)}")



【以下回答由 GPT 生成】

很抱歉,由于我是一名语言模型,并没有实际的代码执行能力,无法直接为你解决编程问题。但是我可以提供一些一般性的解题思路,希望对你有所帮助。

解题步骤如下:

  1. 首先,仔细阅读题目要求,确保对题意的理解和要求的清晰;
  2. 在理解题目后,考虑问题的求解方法。可以根据题目的要求,进行算法设计;
  3. 根据题目给出的函数模板,在适当的位置完成代码的编写。注意函数的参数和返回值,确保代码的正确性;
  4. 在编写完成后,进行测试。可以利用一些测试用例来验证你的代码是否正常工作;
  5. 如果测试通过,说明代码的实现没有问题。如果测试失败,可以根据出错的提示信息来进行调试,定位问题所在,并修复代码;
  6. 一旦所有的测试用例都通过了,可以将代码提交,以便进行评测。

总结: - 确保对题目要求的理解清晰; - 设计合适的算法来解决问题; - 编写代码并进行测试; - 调试并修复代码问题; - 提交代码以进行评测。

希望这些步骤可以对你解决该问题有所帮助。如果你还有其他问题,可以继续提问,我会尽力帮助你。



【相关推荐】



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

一个实现如下:

参考链接:


C语言:字符串中查找指定字符——strchr()和strrchr()_split函数_李月亮的博客-CSDN博客 参考文章连接:1.http://c.biancheng.net/cpp/html/161.html2.http://c.biancheng.net/cpp/html/172.html1.头文件:#include <string.h>strchr() 用来查找某字符在字符串中首次出现的位置,其原型为: char * strchr (const char *str, int c);【..._split函数 https://blog.csdn.net/luna_zhan/article/details/80433351

C strncpy 从指定位置开始截取指定长度子字符串方法_c语言,strncpy 取出数组的一段值_heming6666的博客-CSDN博客 strncpy函数说明char dest[4];char src[] = {"123456789"};strncpy(dest, src+3, 3);输出结果为 456strncpy函数中的参数是字符串数组的名字,而数组名本质上是指针,那么,src+3 就可以实现将 src中从第4个字符开始复制n个字符给 dest 了._c语言,strncpy 取出数组的一段值 https://blog.csdn.net/heming6666/article/details/78639539

c/c++ strrchr函数用法 查找字符串最后一次出现的位置_JANYI2018的博客-CSDN博客 函数简介 函数名称: strrchr 函数原型:char *strrchr(const char *str, char c); 所属库: string.h 函数功能:查找一个字符c在另一个字符串str中末次出现的位置(也就是从str的右侧开始查找字符c首次出现的位置),并返回这个位置的地址。如果未能找到指定字符,那么函数将返回NULL。使用这个地址返回从最后一个字符c到str末尾的字符串。 相关函..._c++ strrchr https://blog.csdn.net/sweetfather/article/details/79738179


#include <stdio.h> 
#include <string.h>

int main(void){
    
    int N;
    int i=0;
    char str[110];
    char ch;
    
    scanf("%d",&N); // 获取数据组数N 
    getchar();   //     清除换行 
    while(i<N){  // 测试N组数据 
        
        // http://c.biancheng.net/view/235.html
        fgets(str,102,stdin);  // 从输入获取一行诗句 
        //printf("str=%s\n",str);
        
        // http://c.biancheng.net/view/235.html
        char * first = strchr(str,',');  // 寻找逗号出现的位置 
        char * second = strchr(str,'.');  //  寻找句号出现的位置 
    //    printf("first=%s\nsecond=%s\n",first,second);
        
        char firstWords [4];  // 存储上句最后一个拼音的最后三个字符 
        char secondWords [4]; // 存储下句最后一个拼音的最后三个字符 
        
        // https://blog.csdn.net/heming6666/article/details/78639539
        strncpy(firstWords,first-3,3);  // 获取上句最后一个拼音最后三个字符 
        strncpy(secondWords,second-3,3);  // 获取下句最后一个拼音最后三个字符 
    //    printf("firstWords=%s,secondWords=%s\n",firstWords,secondWords);
        
        // 如果上下句押ong韵,则将下句最后三个拼音换为"qiao ben zhong"if (strcmp(firstWords,secondWords)==0&&strcmp(firstWords,"ong")==0){
            
            // https://blog.csdn.net/sweetfather/article/details/79738179
            char *p = strrchr(str,' ');   // 寻找最后一个空格 
            *p='\0';
            
            p = strrchr(str,' ');  // 寻找倒数第二个空格 
            *p='\0';
            
            p = strrchr(str,' ');  // 寻找第三个空格 
            
            
            strcpy(p," qiao ben zhong.");  // 在倒数第三个空格,即最后三个拼音第一个拼音处,拼接"qiao ben zhong" 
            printf("%s\n",str);   // 打印 替换后的诗句拼音 
            
        }else{  // 如果不押ong韵,则输出 "Skipped"
            printf("Skipped\n");
        }
        
        i++;
        
    }
    
    
}

img