L1-064估值一亿的AI核心代码

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

int main() {
    int n;
    scanf("%d", &n);  // 输入整数 n,表示需要处理的字符串数量
    getchar();  // 清除输入缓冲区中的换行符

    for (int i = 0; i < n; i++) {  // 遍历每个字符串
        char s[10005] = {};  // 定义字符数组 s,用于存储输入的字符串
        char s_1[10005] = {};  // 定义字符数组 s_1,用于存储处理后的字符串
        gets(s);  // 输入字符串 s
        s_1[0] = ' ';  // 在数组前方加入一个空格,避免在判断 'I' 和 "me" 时不会越界
        printf("%s\n", s);  // 输出原始字符串 s
        printf("AI: ");  // 输出 AI 提示

        int flag = 1, k = 1;  // flag 用于标记是否需要添加空格,k 用于记录 s_1 的当前索引
        for (int j = 0; j < strlen(s); j++) {  // 遍历字符串 s
            if (s[j] == ' ') {  // 如果当前字符是空格
                if (flag == 0) {  // 如果 flag 为 0,表示可以添加空格
                    flag = 1;  // 设置 flag 为 1,表示已经添加空格
                    s_1[k] = s[j];  // 将空格添加到 s_1 中
                    k++;  // 更新 s_1 的索引
                }
            }
            else if ('a' <= s[j] && s[j] <= 'z' || '0' <= s[j] && s[j] <= '9') {  // 如果当前字符是小写字母或数字
                flag = 0;  // 设置 flag 为 0,表示不需要添加空格
                s_1[k] = s[j];  // 将字符添加到 s_1 中
                k++;  // 更新 s_1 的索引
            }
            else if ('A' <= s[j] && s[j] <= 'Z') {  // 如果当前字符是大写字母
                if (s[j] != 'I') {  // 如果字符不是 'I'
                    s_1[k] = s[j] + 32;  // 将大写字母转换为小写字母
                } else {
                    s_1[k] = s[j];  // 保持 'I' 不变
                }
                flag = 0;  // 设置 flag 为 0
                k++;  // 更新 s_1 的索引
            }
            else {  // 如果当前字符是符号
                if (flag == 1 && k != 1) {  // 如果字符前面有空格且不是第一个字符
                    s_1[k - 1] = s[j];  // 用符号覆盖空格
                } else {
                    s_1[k] = s[j];  // 将符号添加到 s_1 中
                    k++;  // 更新 s_1 的索引
                }
                flag = 0;  // 符号后面可以存在空格,重置 flag
            }
        }

        if (flag == 1) {  // 如果最后有空格
            k--;  // 去掉最后一个空格
            s_1[k] = '\0';  // 标记字符串结束
        }

        char temp, s_2[10005] = {};  // 定义字符数组 s_2,用于存储最终处理后的字符串
        for (int j = 0, l = 0; j < k; j++, l++) {  // 遍历 s_1
            // 判断是否是独立的 "can you"
            if (s_1[j] == 'c' && s_1[j + 1] == 'a' && s_1[j + 2] == 'n' && s_1[j + 3] == ' ' && s_1[j + 4] == 'y' && s_1[j + 5] == 'o' && s_1[j + 6] == 'u' &&
                !('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') &&  // 前面不是字母
                !('a' <= s_1[j + 7] && s_1[j + 7] <= 'z' || 'A' <= s_1[j + 7] && s_1[j + 7] <= 'Z')) {  // 后面不是字母
                strcpy(s_2 + l, "I can");  // 替换为 "I can"
                l += 4;  // 更新 s_2 的索引
                j += 6;  // 跳过 "can you" 的长度
            }
            // 判断是否是独立的 "could you"
            else if (s_1[j] == 'c' && s_1[j + 1] == 'o' && s_1[j + 2] == 'u' && s_1[j + 3] == 'l' && s_1[j + 4] == 'd' && s_1[j + 5] == ' ' && s_1[j + 6] == 'y' && s_1[j + 7] == 'o' && s_1[j + 8] == 'u' &&
                !('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') &&  // 前面不是字母
                !('a' <= s_1[j + 9] && s_1[j + 9] <= 'z' || 'A' <= s_1[j + 9] && s_1[j + 9] <= 'Z')) {  // 后面不是字母
                strcpy(s_2 + l, "I could");  // 替换为 "I could"
                l += 6;  // 更新 s_2 的索引
                j += 8;  // 跳过 "could you" 的长度
            }
            // 判断是否是独立的 "I"
            else if (s_1[j] == 'I' &&
                !('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') &&  // 前面不是字母
                !('a' <= s_1[j + 1] && s_1[j + 1] <= 'z' || 'A' <= s_1[j + 1] && s_1[j + 1] <= 'Z')) {  // 后面不是字母
                strcpy(s_2 + l, "you");  // 替换为 "you"
                l += 2;  // 更新 s_2 的索引
            }
            // 判断是否是独立的 "me"
            else if (s_1[j] == 'm' && s_1[j + 1] == 'e' &&
                !('a' <= s_1[j - 1] && s_1[j - 1] <= 'z' || 'A' <= s_1[j - 1] && s_1[j - 1] <= 'Z') &&  // 前面不是字母
                !('a' <= s_1[j + 2] && s_1[j + 2] <= 'z' || 'A' <= s_1[j + 2] && s_1[j + 2] <= 'Z')) {  // 后面不是字母
                strcpy(s_2 + l, "you");  // 替换为 "you"
                l += 2;  // 更新 s_2 的索引
                j += 1;  // 跳过 "me" 的长度
            }
            // 判断是否是问号
            else if (s_1[j] == '?') {
                s_2[l] = '!';  // 替换为感叹号
            }
            // 其他情况
            else {
                s_2[l] = s_1[j];  // 直接复制字符
            }
        }

        printf("%s\n", s_2 + 1);  // 输出最终处理后的字符串 s_2(跳过开头的空格)
    }

    return 0;  // 程序正常结束
}

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务