字符串输入输出流

// All rights reserved.

#include <iostream>
#include <string>
#include <sstream>
using namespace std;
string str[20];
int t;
string cmd;
string detect();
int num(int p=0);

void print_all(string* str, int t){
    for(int i=0;i<t;i++){
        cout<<str[i]<<endl;
    }
}
bool isNum(string str)
{
    stringstream sin(str);
    double d;
    char c;
    if(!(sin >> d)){return false;}
    if (sin >> c){return false;}
    return true;
}
int num(string p){
        return atoi(p.c_str());
}

string detect(){
    cin>>cmd;
    //cout<<cmd;
    if(cmd=="over")
        return "";
    else if(cmd=="add"){
        string a;
        string b;
        
        a=detect();
        b=detect();
        if(isNum(a)&&isNum(b)&&num(a)>=0&&num(a)<=99999&&num(b)>=0&&num(b)<=99999)
            return to_string(num(a)+num(b));
        else
            return a+b;
    }
    else if(cmd=="copy"){
        int xu,pos,len;
        xu=num(detect());
        pos=num(detect());
        len=num(detect());
        
        return str[xu-1].substr(pos,len);
    }
    
    else if(cmd=="find"){
        string search;
        int xu;
    
        search=detect();
        xu=num(detect());
        if(str[xu-1].find(search,0)!=string::npos)
            return to_string(str[xu-1].find(search,0));
        else
            return to_string((int)search.length());
    }
    else if(cmd=="rfind"){
        string search;
        int xu;
        
        search=detect();
        xu=num(detect());
        if(str[xu-1].rfind(search,str[xu-1].length()-1)!=string::npos) //rfind has a return value of npos
            return to_string(str[xu-1].rfind(search,str[xu-1].length()-1));
        else
            return to_string((int)search.length());
    }
        
    else if(cmd=="print"){          //以下是死操作(没有返回值
        int xu;
        
        xu=num(detect());
        //cout<<xu<<endl;
        cout<<str[xu-1]<<endl;
    }
    else if(cmd=="printall")
        print_all(str,t);
    
    else if(cmd=="insert"){
        string inserterr;
        int xu;
        int pos;
        
        inserterr=detect();
        xu=num(detect());
        pos=num(detect());
        str[xu-1].insert(pos,inserterr);
    }
    else if(cmd=="reset"){
        string reseterr;
        int xu;
        
        reseterr=detect();
        xu=num(detect());
        str[xu-1].assign(reseterr);
    }
    else
        return cmd;
    return "";
}

int main(int argc, const char * argv[]) {
    cin>>t;
    string tmp;
    for(int i=0;i<t;i++){
        cin>>tmp;
        str[i].assign(tmp);
    }
    while(cmd!="over"){
    detect();
    }
    /*for(int i=0;i<t;i++){
        cout<<str[i]<<endl;;
    }*/
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Helloirbd/article/details/81102688
今日推荐