• 字符串处理


    打印倒三角

     

    #include <bits/stdc++.h>
    using namespace std;
    
    char c;
    
    void print(int times){
        char start = c - times;
        for(int i=0;i<=times;i++){
            for(int j=0;j<2*i;j++)
                cout<<" ";
            char a;
            for(a=start;a<=c-i;a++){
                if(a!=start)
                    cout<<" ";
                cout<<a;
            }
            a-=2;
            for(;a>=start;a--){
                cout<<" "<<a;
            }
        cout<<endl;
        }
    }
    
    int main(){
        cin>>c;
        char start;
        int times;
        if(c >= 'a'&&c <= 'z')
            times = c - 'a';
        else
            times = c - 'A';
        print(times);
        return 0;
    }

     

     

    编写程序,接受 3 个以 N/D 形式输入的分数,其中 N(0<=N<=65535)为分子,D
    (0<=D<=65535)为分母,输出他们的小数形式。如果小数存在循环节,则用括号括起来,如
    1/3=.33333…表示为 0.(3)。

    #include <bits/stdc++.h>
    using namespace std;
    
    #define maxtimes 1000
    
    int res[maxtimes]={0};
    
    void divide(int m,int n){
        cout<<m<<"/"<<n<<":";
        //处理小数点前的部分
        int a=m/n,b=m%n;
        if(a!=0)
            cout<<a;
        cout<<".";
        bool flag=true;
        int i=0;
        while(i<maxtimes){
            b*=10;
            a=b/n;
            b=b%n;
            res[i++]=a;
            if(a==0){
                flag=false;
                break;
            }
        }
        //cout<<flag<<endl;
        if(!flag){
            for(int j=0;j<i;j++){
                cout<<res[j];
            }
        }
        else{
            for(int j=0;j<maxtimes;j++){//三层循环暴力
                bool success;
                for(int k=j+1;k<maxtimes;k++){
                    if(res[j]==res[k]){
                        success=true;
                        int p=j+1,q=k+1;
                        for(;p<k;p++,q++){
                            if(res[p]!=res[q]){
                                success=false;
                                break;
                            }
                        }
                        if(success){
    
                            for(int l=0;l<j;l++)
                                cout<<res[l];
                            cout<<"(";
                            for(int l=j;l<k;l++){
                                cout<<res[l];
                            }
                            cout<<")"<<endl;
                            return ;
                        }
                    }
                }
            }
        }
    }
    
    int main(){
        int N,D;
        for(int i=0;i<3;i++){
            scanf("%d/%d",&N,&D);
            divide(N,D);
        }
        return 0;
    }

     

     

    十二进制数

    #include <bits/stdc++.h>
    using namespace std;
    
    char twelve[9];
    
    int main(){
        scanf("%s",&twelve);
        int len = strlen(twelve);
        int sum = 0;
        for(int i = 0;i < len ;i++){
            char c=twelve[i];
            int num=0;
            if(c >= '0' && c <= '9'){
                num=c-'0';
            }
            else if(c == 'a')
                num=10;
            else
                num=11;
            cout<<num<<" ";
            sum = sum * 12 + num;
        }
        cout<<endl<<sum<<endl;
        char binary[4][9]={'\0'};
        for(int i=0;i<4;i++){
            for(int j=7;j>=0;j--){
                int temp=sum&1;
                binary[i][j]='0' + temp;
                //printf("%c",binary[i][j]);
                sum>>=1;
            }
        }
        for(int i=3;i>=0;i--){
            printf("%s ",binary[i]);
        }
        return 0;
    }

    统计字母个数 单词个数 输出最多次数的单词(不分大小写)

    #include <bits/stdc++.h>
    using namespace std;
    
    string str;
    int cnt[27]={0};//统计字符出现的次数
    
    int main(){
        getline(cin,str);
        int letter_cnt=0,word_cnt=0;
        int maxcnt=-1,maxnum=0;
        bool flag=true;
        for(int i=0;i<str.size();i++){
            char c=str[i];
            if(c!=' '){
                letter_cnt++;
                if(c>='a'&&c<='z'){
                    cnt[c-'a']++;
                    if(cnt[c-'a']>maxcnt){
                        maxcnt=cnt[c-'a'];
                        maxnum=1;
                    }
                    else if(cnt[c-'a']==maxcnt)
                        maxnum++;
                }
                else{
                    cnt[c-'A']++;
                    if(cnt[c-'a']>maxcnt){
                        maxcnt=cnt[c-'A'];
                        maxnum=1;
                    }
                    else if(cnt[c-'A']==maxcnt)
                        maxnum++;
                }
                if(flag){
                    word_cnt++;
                    flag=false;
                }
            }
            if(c==' '){
                if(!flag){
                    flag=true;
                }
            }
        }
        cout<<"字母个数:"<<letter_cnt<<endl;
        cout<<"单词个数:"<<word_cnt<<endl;
        cout<<"最多的字母:";
        int j=0;
        for(int i=0;i<26;i++){
            if(cnt[i]==maxcnt){
                printf("%c",i+'a');
                j++;
                if(j!=maxnum)
                    cout<<",";
            }
        }
        cout<<endl<<"出现的次数:"<<maxcnt<<endl;
        return 0;
    }

    输入一个字符串 长度小于80

    要求

    1、对于字符串加密输出  加密方法为 对于字母字符输出其ASCII码值右移2(就是+2)后的字母,但是对于字母y,z

    加密后输出 a,b(加密后字母大小写不变)

    2、奇偶校验    对于加密后的字符串 判断每个ASCII码值(2进制)中1的个数 如果不是奇数个1 那么最高位取1

    输出第二问奇偶校验后的数值 十进制表示

    #include <bits/stdc++.h>
    using namespace std;
    
    char str[80];
    unsigned char res[80];//这里注意无符号
    
    int main(){
        scanf("%s",&str);
        for(int i=0;i<strlen(str);i++){
            if(str[i]>='a'&&str[i]<='z'){
                res[i]=(str[i]-'a'+2)%26+'a';
            }
            else{
                res[i]=(str[i]-'A'+2)%26+'A';
            }
        }
        for(int i=0;i<strlen(str);i++){
            cout<<res[i];
        }
        cout<<endl;
        for(int i=0;i<strlen(str);i++){
            cout<<res[i]<<" ";
            int temp=res[i];
            int cnt=0;
            char tempstr[8];
            for(int j=0;j<7;j++){
                if(temp&1==1){
                    cnt++;
                    tempstr[j]='1';
                }
                else
                    tempstr[j]='0';
                temp>>=1;
            }
            if(cnt%2==0){
                res[i]|=0x80;
                tempstr[7]='1';
            }
            else{
                tempstr[7]='0';
            }
            for(int j=7;j>=0;j--){
                cout<<tempstr[j];
            }
            //unsigned short m=res[i];
            printf(" %u\n",res[i]);
        }
        return 0;
    }

    对给定的一个字符串,找出有重复的字符,并给出其位置,如:abcaaAB12ab12 输出:a,1;a,4;a,5;a,10,b,2;b,11,1,8;1,12, 2,9;2,13。

    #include <bits/stdc++.h>
    using namespace std;
    
    //map<char,vector<int> > a;
    
    struct node{
        char c;
        vector<int> ind;
    }a[128];
    int num=0;
    int shabi[128];
    int main(){
        char str[100];
        while(scanf("%s",&str)!=EOF){
            int cnt[130]={0};
            for(int i=0;i<strlen(str);i++){
                cnt[str[i]]++;
            }
            bool flag[130]={false};
            for(int i=0;i<strlen(str);i++){
                if(cnt[str[i]]>1){
                    if(!flag[str[i]]){
                        shabi[str[i]]=num;
                        a[num].c=str[i];
                        vector<int> temp;
                        temp.push_back(i);
                        a[num++].ind=temp;
                        flag[str[i]]=true;
                    }
                    else{
                        a[shabi[str[i]]].ind.push_back(i);
                        //a[str[i]].push_back(i);
                    }
                }
            }
            for(int i=0;i<num;i++){
                for(int j=0;j<a[i].ind.size();j++){
                    if(j!=0)
                        printf(",");
                    printf("%c:%d",a[i].c,a[i].ind[j]);
                }
                printf("\n");
            }
    //        for(map<char,vector<int>>::iterator it=a.begin();it!=a.end();it++){
    //            char c=it->first;
    //            for(int i=0;i<it->second.size();i++){
    //                if(i!=0)
    //                    printf(",");
    //                printf("%c:%d",c,it->second[i]);
    //            }
    //            printf("\n");
    //        }
        }
        return 0;
    }

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

    #include <bits/stdc++.h>
    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<s.size();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<<num<<endl;
                    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 <bits/stdc++.h>
    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<lena||i<lenb;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 <bits/stdc++.h>
    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<lena||i<lenb;i++){
            temp=a[i]+b[i]+carry;
            res[i]=temp%10;
            carry=temp/10;
        }
        //cout<<carry;
        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;
    }

     守形数是这样一种整数,它的平方的低位部分等于它本身。 比如25的平方是625,低位部分是25,因此25是一个守形数。 编一个程序,判断N是否为守形数。

    #include <bits/stdc++.h>
    using namespace std;
    
    int main(){
        int n;
        while(cin>>n){
            bool flag=false;
            int sq=n*n;
            string s1=std::to_string(n);
            string s2=std::to_string(sq);
            int ind=s2.find(s1);
            if(ind!=string::npos){
                if(ind+s1.size()==s2.size())
                    flag=true;
            }
            if(flag){
                cout<<"Yes!"<<endl;
            }
            else
                cout<<"No!"<<endl;
        }
        return 0;
    }

    可能有多组测试数据,对于每组数据, 对于字符串中的每一个字符,输出按题目进行奇偶校验后的数,每个字符校验的结果占一行。

    取二进制位的方法

    #include <bits/stdc++.h>
    using namespace std;
    
    char str[101];
    
    int main(){
        while(scanf("%s",&str)!=EOF){
                //cout<<strlen(str)<<endl;
            for(int i=0;i<strlen(str);i++){
                char c=str[i];//原来这里没有用c直接用了str[i] 导致循环条件中strlen(str)发生变化 程序出错
                char res[8];
                int num=0;
                int coun=7;
                while(coun>0){
                    if(c&0x1){
                        res[coun]='1';
                        num++;
                    }
                    else
                        res[coun]='0';
                    coun--;
                    c>>=1;
                }
                if(num%2==0){
                    res[0]='1';
                }
                else
                    res[0]='0';
                printf("%s\n",res);
            }
        }
        return 0;
    }
  • 相关阅读:
    oracle 锁查询
    ORACLE 本session产生的redo
    UML
    面向对象
    设计思维
    程序员习惯
    程序员修炼之道
    架构指南
    微服务架构
    测试用例
  • 原文地址:https://www.cnblogs.com/yaotong0830/p/15977699.html
Copyright © 2020-2023  润新知