getline的一些坑

在做牛客网在线编程时遇到的坑,题目链接:单词缩写

#include <iostream>
#include <string>
#include <vector>
using namespace std;
int main(){
    int n;
    vector<string> word;
    cin>>n;
    string s;
    getline(cin,s);
    for(int i=0;i<n;i++){
        getline(cin,s);
        word.push_back(s);
    }
//    vector<string>::iterator p;
//    p=word.begin();
//    while(p!=word.end()){
//        if((*p).length()>=10){
//            cout<<(*p)[0]<<(*p).length()-2<<(*p)[(*p).length()-1];
//        }
//        else{cout<<*p;}
//        p++;
//        cout<<endl;
//    }
    for(int i=0;i<word.size();i++){
        if (word[i].length()>=10) {
            cout<<(word[i])[0]<<word[i].length()-2<<(word[i])[word[i].length()-1];
        }
        else{
            cout<<word[i];
        }
        cout<<endl;
    }
}

上述代码已通过,在cin操作后会有一个回车留在缓冲区,需第一个getline处理掉然后正常输入

补充:代码改进建议

image.png

发表评论

电子邮件地址不会被公开。 必填项已用*标注

滚动到顶部