字符串处理

打印倒三角

 

复制代码
#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;
}
复制代码
posted @   完全感覚Dreamer  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示