字符串处理


可能有多组测试数据,对于每组数据,如果IP地址合法则输出"Yes!”,否则输出"No!”。 合法的IP地址为: a、b、c、d都是0-255的整数。

#include 
using namespace std;

int main(){
    int point_pos[5];
    point_pos[0]=-1;
    string s;
    while(cin>>s){
        int a=1;//记录点位置
        bool flag=true;
        for(int i=0;i){
            if(s[i]=='.'&&a==4){
                flag=false;
                break;
            }
            if(s[i]=='.'){
                point_pos[a++]=i;
            }
        }
        if(a!=4){
            flag=false;
        }
        point_pos[5]=s.size();
        if(flag){
            int num;
            string temp;
            for(int i=0;i<4;i++){
                num=atoi((s.substr(point_pos[i]+1,point_pos[i+1])).c_str());//取子串用substr(a,b)b是结尾符后一位 atoi将字符串转变为整数
                //cout<
                if(num<0||num>255){
                    flag=false;
                    break;
                }
            }
        }
        if(flag){
            cout<<"Yes!"<<endl;
        }
        else
            cout<<"No!"<<endl;
    }
    return 0;
}

 输入包括两个数a和b,其中a和b的位数不超过1000位。

大整数处理

用字符串:

#include 
using namespace std;

void rev(char str1[],char str2[]){
    for(int i=0,j=strlen(str1)-1;j>=0;j--,i++){
        str2[i]=str1[j];
    }
}
int lena,lenb;
char s1[1100],s2[1100],res[1100],a[1100],b[1100];
int add(char str1[],char str2[]){
    int carry=0,sum,temp;
    int i;
    for(i=0;i){
        temp=str1[i]+str2[i]-'0'-'0';
        sum=(temp+carry)%10;
        carry=(temp+carry)/10;
        res[i]=sum+'0';
    }
    if(carry){
        res[i]=1;
        i++;
    }
    return i-1;
}


int main(){
    while(scanf("%s %s",&s1,&s2)!=EOF){
        memset(a,'0',1100*sizeof(char));
        memset(b,'0',1100*sizeof(char));
        lena=strlen(s1);
        lenb=strlen(s2);
        rev(s1,a);
        //puts(a);
        rev(s2,b);
        //puts(b);
        int reslen=add(a,b);
        for(int i=reslen;i>=0;i--){
            putchar(res[i]);
        }
        putchar('\n');
    }
    return 0;
}

用int:

#include 
using namespace std;

int res[1002];
int lena,lenb,lenres;
string str1,str2;

void rev(string str,int num[]){
    for(int i=0,j=str.size()-1;j>=0;j--,i++){
        num[i]=str[j]-'0';
    }
}

int add(int a[],int b[]){
    int carry=0,temp,i;//进位不初始化0会出错
    for(i=0;i){
        temp=a[i]+b[i]+carry;
        res[i]=temp%10;
        carry=temp/10;
    }
    //cout<
    if(carry){
        res[i]=1;
        i++;
    }
    lenres=i-1;
}

int main(){
    while(cin>>str1){
        cin>>str2;
        lena=str1.size();
        lenb=str2.size();
        int a[1001]={0},b[1001]={0};//数组不初始化0也出错
        rev(str1,a);
        rev(str2,b);
        add(a,b);
        for(int i=lenres;i>=0;i--){
            printf("%d",res[i]);
        }
        printf("\n");
    }
    return 0;
}