真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

L1-064估值一億的AI核心代碼(C++)-創(chuàng)新互聯(lián)

以上圖片來(lái)自新浪微博。

創(chuàng)新互聯(lián)建站是一家專業(yè)提供千陽(yáng)企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、H5開(kāi)發(fā)、小程序制作等業(yè)務(wù)。10年已為千陽(yáng)眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)的建站公司優(yōu)惠進(jìn)行中。

本題要求你實(shí)現(xiàn)一個(gè)稍微更值錢一點(diǎn)的 AI 英文問(wèn)答程序,規(guī)則是:

  • 無(wú)論用戶說(shuō)什么,首先把對(duì)方說(shuō)的話在一行中原樣打印出來(lái);

  • 消除原文中多余空格:把相鄰單詞間的多個(gè)空格換成 1 個(gè)空格,把行首尾的空格全部刪掉,把標(biāo)點(diǎn)符號(hào)前面的空格刪掉;

  • 把原文中所有大寫英文字母變成小寫,除了 I;

  • 把原文中所有獨(dú)立的 can you、could you 對(duì)應(yīng)地?fù)Q成 I can、I could—— 這里“獨(dú)立”是指被空格或標(biāo)點(diǎn)符號(hào)分隔開(kāi)的單詞;

  • 把原文中所有獨(dú)立的 I 和 me 換成 you;

  • 把原文中所有的問(wèn)號(hào) ? 換成驚嘆號(hào) !;

  • 在一行中輸出替換后的句子作為 AI 的回答。

輸入格式:

輸入首先在第一行給出不超過(guò) 10 的正整數(shù) N,隨后 N 行,每行給出一句不超過(guò) 1000 個(gè)字符的、以回車結(jié)尾的用戶的對(duì)話,對(duì)話為非空字符串,僅包括字母、數(shù)字、空格、可見(jiàn)的半角標(biāo)點(diǎn)符號(hào)。

輸出格式:

按題面要求輸出,每個(gè) AI 的回答前要加上 AI: 和一個(gè)空格。

輸入樣例:
6
Hello ?
 Good to chat   with you
can   you speak Chinese?
Really?
Could you show me 5
What Is this prime? I,don 't know
輸出樣例:
Hello ?
AI: hello!
 Good to chat   with you
AI: good to chat with you
can   you speak Chinese?
AI: I can speak chinese!
Really?
AI: really!
Could you show me 5
AI: I could show you 5
What Is this prime? I,don 't know
AI: what Is this prime! you,don't know

封裝的函數(shù)比較多,寫的代碼也很長(zhǎng),不過(guò)應(yīng)該更好理解。

測(cè)試點(diǎn)0占10分,應(yīng)該是字母轉(zhuǎn)小寫的問(wèn)題,一開(kāi)始我整道題只得了1分(寫了那么久還只是1分崩潰了...),后面我才發(fā)現(xiàn)我理解錯(cuò)了”把原文中所有大寫英文字母變成小寫,除了 I“這句話。意思是句子中本來(lái)是大寫的"I"就不需要轉(zhuǎn)小寫了,比如樣例6中的二個(gè)單詞是"Is",并不需要轉(zhuǎn)成"is",我還以為只有獨(dú)立的I需要大寫...改過(guò)來(lái)后就15分了。

不確定自己的獨(dú)立是否實(shí)現(xiàn)可以試試:輸入“can youI”正確輸出為"can youI"、輸入“meI”正確輸出為"meI"、輸入“II”正確輸出為"II"。

測(cè)試點(diǎn)4應(yīng)該是題目要求4和要求5的先后順序的問(wèn)題,我是通過(guò)先完成要求5,再完成要求4解決的。

比如輸入"can me”,如果先實(shí)現(xiàn)要求5,變?yōu)?can you",再實(shí)現(xiàn)要求4會(huì)變成"I can",但是這樣是錯(cuò)的,正確的輸出是"can you"。

#include#includeusing namespace std;

//把原文中所有大寫英文字母變成小寫,除了 I
void letterLower(string& str)
{
    for (int i = 0; i< str.size(); i++)
    {
        if (str[i] >= 'A' && str[i]<= 'Z' && str[i] != 'I')
        {
            str[i] += 32;
        }
    }
}

//消除多余空格
void delSpace(string& str)
{
    //把行首的空格全部刪掉
    while (str.front() == ' ')
    {
        str.erase(0, 1);
        if (str.size() == 0)
            return;
    }
    //把行尾的空格全部刪掉
    while (str.back() == ' ')
    {
        str.pop_back();
    }

    //把相鄰單詞間的多個(gè)空格換成 1 個(gè)空格
    int pos = 0;
    while (pos< str.size() - 1)
    {
        if (str[pos] == ' ' && str[pos + 1] == ' ')
        {
            str.erase(pos, 1);
            continue;
        }
        pos++;
    }

    //把標(biāo)點(diǎn)符號(hào)前面的空格刪掉
    for (int i = 0; i< str.size() - 1; i++)
    {
        if (str[i] == ' ')
        {
            //除了大寫I、小寫字母、數(shù)字以外的都是標(biāo)點(diǎn)符號(hào)
            if (str[i + 1] == 'I'|| (str[i + 1] >= 'a' && str[i + 1]<= 'z')|| (str[i + 1] >= '0' && str[i + 1]<= '9'))
                continue;//如果不是標(biāo)點(diǎn)符號(hào),就不刪除
            str.erase(i, 1);
        }
    }
}

//把原文中所有的問(wèn)號(hào) ? 換成驚嘆號(hào) !
void changeQues(string& str)
{
    for (int i = 0; i< str.size(); i++)
    {
        if (str[i] == '?')
            str[i] = '!';
    }
}

//把原文中所有獨(dú)立的 can you、could you 對(duì)應(yīng)地?fù)Q成 I can、I could—— 這里“獨(dú)立”是指被空格或標(biāo)點(diǎn)符號(hào)分隔開(kāi)的單詞
void answer(string& str)
{
    int pos = 0;//從頭開(kāi)始處理can you
    while (pos< str.size())
    {
        int findpos = str.find("can you", pos);
        if (findpos == -1)//如果找不到就結(jié)束循環(huán)
            break;

        if (findpos == 0)//如果can you在句子開(kāi)頭
        {
            if (str.size() == 7)//如果句子只是can you,為了防止越界,應(yīng)該結(jié)束循環(huán)
            {
                str.replace(findpos, 7, "I can");
                break;
            }
            else if (!(str[findpos + 7] >= 'a' && str[findpos + 7]<= 'z') && !(str[findpos + 7] >= '0' && str[findpos + 7]<= '9') && str[findpos + 7] != 'I' && str[findpos + 7] != 'B')
            {
                str.replace(findpos, 7, "I can");
            }
                pos++;
                continue;
        }

        //"can you"出現(xiàn)在最后
        if (findpos + 7 == str.size() && !(str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z') && !(str[findpos - 1] >= '0' && str[findpos - 1]<= '9') && str[findpos - 1] != 'I' && str[findpos - 1] != 'B')
        {
            str.replace(findpos, 7, "I can");
            break;//防止下面代碼的越界訪問(wèn)
        }

        if ((str[findpos + 7] >= 'a' && str[findpos + 7]<= 'z') || (str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z'))//如果can you前后是小寫字母
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if ((str[findpos + 7] >= '0' && str[findpos + 7]<= '9') || (str[findpos - 1] >= '0' && str[findpos - 1]<= '9'))//如果can you前面或后面是數(shù)字
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if ((str[findpos + 7] == 'I') || (str[findpos - 1] == 'I'))//如果can you前后是大寫I
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if (str[findpos + 7] == 'B')//如果you后是標(biāo)記用的大寫字母B
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        //如果都不是,說(shuō)明是獨(dú)立的can you
        str.replace(findpos, 7, "I can");
        pos++;
    }

    pos = 0;//從第一位開(kāi)始處理could you
    while (pos< str.size())
    {
        int findpos = str.find("could you", pos);
        if (findpos == -1)//如果找不到
            break;

        if (findpos == 0)//如果could you在句子開(kāi)頭
        {
            if (str.size() == 9)//如果句子只是could you,為了防止越界,應(yīng)該結(jié)束循環(huán)
            {
                str.replace(findpos, 9, "I could");
                break;
            }
            else if (!(str[findpos + 9] >= 'a' && str[findpos + 9]<= 'z') && !(str[findpos + 9] >= '0' && str[findpos + 9]<= '9') && str[findpos + 9] != 'I' && str[findpos + 9] != 'B')
            {
                str.replace(findpos, 9, "I could");
            }
            pos++;
            continue;
        }

        if (findpos + 9 == str.size() && !(str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z') && !(str[findpos - 1] >= '0' && str[findpos - 1]<= '9') && str[findpos - 1] != 'I' && str[findpos + 9] != 'B')//"could you"出現(xiàn)在最后
        {
            str.replace(findpos, 9, "I could");
            break;
        }

        if ((str[findpos + 9] >= 'a' && str[findpos + 9]<= 'z') || (str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z'))//如果could you前面或后面是小寫字母
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if ((str[findpos + 9] >= '0' && str[findpos + 9]<= '9') || (str[findpos - 1] >= '0' && str[findpos - 1]<= '9'))//如果could you前面或后面是數(shù)字
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if ((str[findpos + 9] == 'I') || (str[findpos - 1] == 'I'))//如果could you前后是大寫I
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if (str[findpos + 9] == 'B') //you不能標(biāo)記后的youB
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        //如果都不是,說(shuō)明是獨(dú)立的could you
        str.replace(findpos, 9, "I could");
        pos++;
    }
}

//把原文中所有獨(dú)立的 I 和 me 換成 you
//在這暫時(shí)先換成youB,方便和can you,could you的you區(qū)分開(kāi)來(lái)
void changePerson(string& str)//切換人稱
{
    int pos = 0;//從頭開(kāi)始處理獨(dú)立的me
    while (pos< str.size())
    {
        int findpos = str.find("me", pos);
        if (findpos == -1)//如果找不到
            break;

        if (findpos == 0)//防止越界,單獨(dú)處理
        {
            if (str.size() == 2)//句子只是me
            {
                str.replace(findpos, 2, "youB");
                break;
            }
            else if(!(str[findpos + 2] >= 'a' && str[findpos + 2]<= 'z') && !(str[findpos + 2] >= '0' && str[findpos + 2]<= '9') && str[findpos + 2] != 'I')
                str.replace(findpos, 2, "youB");

            pos++;
            continue;
        }

        if (findpos + 2 == str.size() && !(str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z') && !(str[findpos - 1] >= '0' && str[findpos - 1]<= '9') && str[findpos - 1] != 'I')//"me"出現(xiàn)在最后
        {
            str.replace(findpos, 2, "youB");
            break;
        }
        if ((str[findpos + 2] >= 'a' && str[findpos + 2]<= 'z') || (str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z'))//如果me前面或后面是小寫字母
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if ((str[findpos + 2] >= '0' && str[findpos + 2]<= '9') || (str[findpos - 1] >= '0' && str[findpos - 1]<= '9'))//如果me前面或后面是數(shù)字
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        if ((str[findpos + 2] == 'I') || (str[findpos - 1] == 'I'))//如果me前后是大寫I
        {
            pos++;//繼續(xù)從后一位找
            continue;
        }
        //如果都不是,說(shuō)明是獨(dú)立的me
        str.replace(findpos, 2, "youB");
        pos++;
    }

    pos = 0;//從頭開(kāi)始處理獨(dú)立的I
    while (pos< str.size())
    {
        int findpos = str.find("I", pos);

        if (findpos == -1)
            break;

        if (findpos == 0)//防止越界,單獨(dú)處理
        {
            if (str.size() == 1)//句子只是I
            {
                str.replace(findpos, 1, "youB");
                break;
            }
            else if (!(str[findpos + 1] >= 'a' && str[findpos + 1]<= 'z') && !(str[findpos + 1] >= '0' && str[findpos + 1]<= '9') && str[findpos + 1] != 'I')
                str.replace(findpos, 1, "youB");

            pos++;
            continue;
        }

        if (findpos + 1 == str.size() && !(str[findpos - 1] >= '0' && str[findpos - 1]<= '9') && !(str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z') && str[findpos - 1] != 'I')
        {
            str.replace(findpos, 1, "youB");
            break;
        }
        if ((str[findpos - 1] >= '0' && str[findpos - 1]<= '9') || (str[findpos + 1] >= '0' && str[findpos + 1]<= '9'))
        {
            pos++;
            continue;
        }
        if ((str[findpos - 1] >= 'a' && str[findpos - 1]<= 'z') || (str[findpos + 1] >= 'a' && str[findpos + 1]<= 'z'))
        {
            pos++;
            continue;
        }
        if (str[findpos - 1] == 'I' || (str[findpos + 1] == 'I'))
        {
            pos++;
            continue;
        }
        //代碼走到這還沒(méi)continue,說(shuō)明獨(dú)立
        str.replace(findpos, 1, "youB");
        pos++;
    }
}

void eraseB(string& str)
{
    for (int i = 0; i< str.size(); i++)
    {
        if (str[i] == 'B')
            str.erase(i, 1);
    }
}


void AI(string& str)
{
    cout<< "AI: ";
    changeQues(str);
    letterLower(str);
    delSpace(str);
    changePerson(str);
    answer(str);
    eraseB(str);//將標(biāo)記用的B刪除
}

int main()
{
    int n; cin >>n;
    getchar();

    while (n--)
    {
        string str;
        getline(cin, str);
        cout<< str<< endl;
        AI(str);
        cout<< str<< endl;
    }

    return 0;
}

真的寫的好長(zhǎng),這題我也寫了很久(一整個(gè)晚上),在大學(xué)里寫沒(méi)寫出來(lái),現(xiàn)在放寒假了從頭開(kāi)始寫過(guò)...

水平不高,如有不正確的地方,歡迎大家在評(píng)論區(qū)指正^_^

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧


標(biāo)題名稱:L1-064估值一億的AI核心代碼(C++)-創(chuàng)新互聯(lián)
當(dāng)前網(wǎng)址:http://weahome.cn/article/ccegdj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部