白书字符串数组

数字与字符串转换

  • 使用itoa函数,注意要指定转换的进制..
#include 
#include 
#include 

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 
#include 
#include 

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
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=0 && !a[x][y-1]) a[x][--y]=++tot;
         while(x-1>=0 && !a[x-1][y]) a[--x][y]=++tot;
         while(y+1

2.竖式乘法

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

#include
#include
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\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
#include
#include
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;imax) max=j-i+1;
        }
     printf("max = %d\n",max);
     return 0;
}

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

#include
#include
#include
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=0 && i+jmax) {max=2*j+1;x=p[i-j];y=p[i+j];}
        }
        for(j=0;i-j>=0 && i+j+1max) {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
#include
#include
const int MAX=189819;

int main()
{
     int count=1,sumLength=0;
     char word[MAX];
     gets(word);
     int preIndex=0;
     for(int i=0;i

5.计算器

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

#include
#include
#include
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='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
#include
#include
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 
#include 
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 
#include 
#include 

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 
#include 
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=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-5;i--)
        printf("%d",a[i]);

    printf("\n"); 
}

你可能感兴趣的:(白书字符串数组)