美文网首页
白书字符串数组

白书字符串数组

作者: nino天 | 来源:发表于2014-08-25 22:28 被阅读56次

    数字与字符串转换

    • 使用itoa函数,注意要指定转换的进制..
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {   
        int number=12345;
        char string[7]={0};
        itoa(number,string,10);
        printf("integer=%d\n",number);
        printf("string=");
        for(int i=0;i<6;i++)
            printf("%c",string[i]);
        printf("\n");
        return 0;
    }
    
    • 用sprintf,sscanf来写入写出..
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main()
    {   
        int number=12345;
        int temp;
        char string[7]={0};
        sprintf(string,"%d",number);
        printf("string=");
        for(int i=0;i<6;i++)
            printf("%c",string[i]);
        printf("\n");
    
        sscanf(string,"%d",&temp);
        printf("integer= %d\n",temp);
        return 0;
    }
    

    1.蛇形填数

    注意边界条件的判断

    #include<stdio.h>
    int a[100][100]={0};
    int main()
    {
         int n,tot,x,y;
         scanf("%d",&n);
         x=0;y=n-1;
         tot=a[x][y]=1;
         while(tot<n*n)
         {
             while(x+1<n && !a[x+1][y]) a[++x][y]=++tot;
             while(y-1>=0 && !a[x][y-1]) a[x][--y]=++tot;
             while(x-1>=0 && !a[x-1][y]) a[--x][y]=++tot;
             while(y+1<n && !a[x][y+1]) a[x][++y]=++tot;
         }
         for(x=0;x<n;x++)
         {
             for(y=0;y<n;y++)
                 printf("%3d",a[x][y]);
             printf("\n");
         }
            return 0;
    }
    

    2.竖式乘法

    查找数字是否出现过,可以用字符串操作strchr查找字符串中是否出现过字符c,即把数字转换成字符去与输入的字符串对比..

    #include<stdio.h>
    #include<string.h>
    int main()
    {
         int abc,de,x,y,z,ok,i,count=0;
         char s[100],buf[100]="";
         scanf("%s",s);
         for(abc=100;abc<=999;abc++)
             for(de=10;de<=99;de++)
             {
                 x = abc*(de%10); y = abc*(de/10); z = abc*de;
                 sprintf(buf,"%d%d%d%d%d",abc,de,x,y,z);
                                                //把十进制的数字以char输出到字符数组中
                 ok=1;
                 for(i=0;i<strlen(buf);i++)
                     if(strchr(s,buf[i])==NULL) ok=0;//s中首次出现字符buf[i]的位置
                 if(ok)
                 {
        printf("<%d>\n",++count);
        printf("%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",abc,de,x,y,z);
                 }
             }
            printf("The number of solutions = %d\n",count);
            return 0;
    }
    

    3.最长的回文子串

    遍历寻找子串,从左起开始循环检测

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    char buf[5000],s[5000];
    int main()
    {
        fgets(buf,sizeof(buf),stdin);
        int n,m=0,ok=1,max=0;
        int i,j,k;
        n=strlen(buf);
        for(i=0;i<n;i++)
            if(isalpha(buf[i])) s[m++]=toupper(buf[i]);
        for(i=0;i<m;i++)
            for(j=i;j<m;j++)
            {
                ok=1;
                for(k=i;k<=j;k++)
                    if(s[k]!=s[j-(k-i)]) 
                        ok=0;
                if(ok && j-i+1>max) max=j-i+1;
            }
         printf("max = %d\n",max);
         return 0;
    }
    

    从中间向两边扩展,从中间开始枚举,奇数偶数有区别注意区分,总的复杂度是o(m^2),比遍历要小,另外要原样输出必须存下字符的位置..
    这里输入用的是fgets也可以用gets..

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    char buf[5000],s[5000];
    int main()
    {
        fgets(buf,sizeof(buf),stdin);
        int n,m=0,ok=1,max=0;
        int i,j,k,x,y,p[100]={0};
        n=strlen(buf);
        for(i=0;i<n;i++)
            if(isalpha(buf[i])) {p[m]=i;s[m++]=toupper(buf[i]);}
        for(i=0;i<m;i++)
        {
            for(j=0;i-j>=0 && i+j<m;j++)
            {
                if(s[i-j]!=s[i+j]) break;
                if(j*2+1>max) {max=2*j+1;x=p[i-j];y=p[i+j];}
            }
            for(j=0;i-j>=0 && i+j+1<m;j++)
            {
                if(s[i-j]!=s[i+j+1]) break;
                if(j*2+2>max) {max=2*j+2;x=p[i-j];y=p[i+j+1];}
            }
        }
        for(i=x;i<=y;i++)
            printf("%c",buf[i]);
        printf("\n");
         return 0;
    }
    

    4.统计单词的长度

    输入一个gets的字符串,提取其中的字符

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    const int MAX=189819;
    
    int main()
    {
         int count=1,sumLength=0;
         char word[MAX];
         gets(word);
         int preIndex=0;
         for(int i=0;i<strlen(word);i++)
         {
             if(word[i]==' ') 
             {
                 if(preIndex==0)
                     sumLength+= i;
                 count++;
                 sumLength += i-preIndex;
                 preIndex=i+1;
             }
         }
    
         if(count ==0)
             printf("No Input");
         else
             printf("%lf\n",(double)sumLength/count);
    
         return 0;
    }
    

    5.计算器

    从输入的一行字符串中提取数字,根据操作符来分隔左操作数和右操作数..先要转存到字符数组中,再换算成数字..

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    const int MAX=189819;
    
    int main()
    {
         int x,y,i,power;
         char str[MAX];
         char strX[4]={0},strY[4]={0};
         char opr;
         gets(str);
         
         int p=0;
         for(i=0;str[i]!='+' && str[i]!='-' && str[i]!='*' && str[i]!='/';i++)
             if(str[i]>='0' && str[i]<='9')
                 strX[p++]=str[i];
         strX[p]='\0';
         //printf("%s",strX);
    
         opr=str[i];
         //printf("%c",opr);
         p=0;
         while(i<strlen(str))
         {
             if(str[i]>='0' && str[i]<='9')
                 strY[p++]=str[i];
             i++;
         }
         strY[p]='\0';
         //printf("%s",strY);
         x=0;power=1;
         for(i=strlen(strX)-1;i>=0;i--)
         {
             x += (strX[i]-'0')*power;
             power *= 10;
         }
    
         y=0;power=1;
         for(i=strlen(strY)-1;i>=0;i--)
         {
             x += (strY[i]-'0')*power;
             power *= 10;
         }
    
         if(opr == '+') printf("%d\n",x+y);
         if(opr == '-') printf("%d\n",x-y);
         if(opr == '*') printf("%d\n",x*y);
    
         return 0;
    }
    

    6.进制转换

    十进制转换成其他进制,就一直求余就行了,如果忘了,推一次二进制除法就可以写出来..

    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    const int MAX=189819;
    
    int main()
    {    
      int n,b;
      int ans[MAX]={0};
      scanf("%d%d",&n,&b);
      int i=0;
      while(n)
      {
          ans[i++]=n%b;
          n = n/b;
      }
      for(i=i-1;i>=0;i--)
          printf("%d",ans[i]);
      printf("\n");
    
      return 0;
    }
    

    7.字符串转换

    输入的字符串错位,可以用单个输入getchar来做。首先要输入的c在常量字符串当中的位置,其次要考虑空格的输出。

    #include <stdio.h>
    #include <math.h>
    char *s="`1234567890-=QWERTYUIOP[]\ASDFGHJKL;'ZXCVBNM,./";
    
    int main()
    {
        int i,c;
        while((c=getchar())!=EOF)
        {
            for(i=1;s[i]&&s[i]!=c;i++);
            if(s[i]) putchar(s[i-1]);
            else putchar(c);
        }
        return 0;
    }
    

    8.周期串的检验

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    
    int main()
    {
        char word[100];
        scanf("%s",word);
        int len = strlen(word);
        for(int i=1;i<=len;i++)
            if(len%i==0)
            { 
                int ok=1;
                for(int j=i;j<=len;j++)
                    if(word[j]!=word[j%i]) {ok=0;break;}
                if(ok) {printf("%d\n",i);break;}
              
            }
        return 0;
    }
    

    华为的一道题

    #include <stdio.h>
    #include <stdlib.h>
    int a[10];
    
    void swap(int &a,int &b)
    {
        if(a!=b)
        {
            a ^=b;
            b ^=a;
            a ^=b;
        }
    
    }
    
    void insert_sort(int a[],int n)
    {
        for(int i=1;i<n;i++)
            for(int j=i-1;j>=0 && a[j]>a[j+1];j--)
                swap(a[j],a[j+1]);
    }
    
    int remove_duplicate(int a[],int n)
    {
        int index=0;
        for(int i=1;i<n;i++)
            if(a[index]!=a[i])
                a[++index]=a[i];
        return index+1;
    }
    
    
    
    int main()
    {
        int i,n;
        for(i=0;i<10;i++)
            scanf("%d",&a[i]);
        insert_sort(a,10);
    
        //for(i=0;i<10;i++)
            //printf("%d ",a[i]);
        n=remove_duplicate(a,10);
    
       // for(i=0;i<n;i++)
         // printf("%d ",a[i]);
        for(i=n-1;i>=n-5;i--)
            printf("%d",a[i]);
    
        printf("\n"); 
    }
    

    相关文章

      网友评论

          本文标题:白书字符串数组

          本文链接:https://www.haomeiwen.com/subject/detytttx.html