三道C语言字符串操作的笔试题

来源:互联网 发布:手机淘宝怎么申请售后 编辑:程序博客网 时间:2024/04/28 16:15

对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。

#include <stdio.h>#include <string.h>#include <stdlib.h>#define N 30/************************************************函数名称: fun*创建时间: 2010.12.5*描    述: 对一个字符串重新排列,字母排在前面,数字排在后面,并不改变原来字母之间以及数字之间的字符顺序。*参    数: char * s,int *m*返 回 值: chLetter(数组chLetter[]的首元素地址)*局部变量: char chLetter[N];*char chNumber[N];*int i,j,k;************************************************/char * fun(char * s,int *m)//参数m是通过调试才想到的{char chLetter[N];//用来存放字母char chNumber[N];//用来存放数字int i,j,k;i=0;//初始化j=0;//j用来记录字母的个数k=0;//k用来记录数字的个数for (i=0; i<N; i++){if (s[i] >= 'A' && s[i] <= 'Z'//将字母存入chLetter[]|| s[i] >= 'a' && s[i] <= 'z'){chLetter[j]=s[i];j++;}if (s[i] >= '0' && s[i] <='9')//将数字存入chNumber[]{chNumber[k]=s[i];k++;}}chLetter[j]='';chNumber[k]='';*m=j+k;//用来返回最后输入和输出时字符的个数strcat(chLetter,chNumber);return chLetter;}//主函数void main(){char s[N];int i;int m;char *p;p=NULL;printf("请输入字符串(30字符以内):n");scanf("%s",s);p=fun(s,&m);//刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码for (i=0; i<m; i++)//将返回的值复制给数组以待输出{s[i]=p[i];}printf("结果为:");for (i=0; i<m; i++)//输出结果{printf("%c",s[i]);}printf("n");}

将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串。

    #include <stdio.h>#include <string.h>#include <stdlib.h>#define N 30    //s所指字符串的最大长度#define T 2     //t1和t2所指字符串的长度 /************************************************函数名称: fun*创建时间: 2010.12.5*描    述: 将s所指字符串中最后一次出现的与t1所指字符串相同的子串替换为t2所指字符串*参    数: char * s,char * t1, char * t2,int *m*返 回 值: w(数组w[]的首元素地址)*局部变量: char w[N];*           char temp[T];*           char t1temp[T];*           int i,j,k,l;************************************************/char * fun(char * s,char * t1, char * t2,int *m)    //m的作用和第一题一样,没m最后两个字符会乱码(想寻求其他方法)      {    char w[N];              //用来存放处理后的字符串    char temp[T];       //用来存放从s所指字符串中截取的子串    char t1temp[T];     //用来存放t1所指字符串    int i,j,k,l;    //向t1temp中存入t1所指字符串    for (i=0; i<T;i++)    {        t1temp[i]=t1[i];    }    t1temp[T]='';         //求m所指的值    for (i=0;i<N;i++)    {        if (s[i]=='')        {            *m=i;        }    }     //寻找相同时的最后一个字符的下标    for (i=0; i<N; i++)    {        l=0;        for (j=i; j<(i+T); j++,l++)  //截取长度为T的子串存到temp[]中        {            temp[l]=s[j];        }        temp[T]='';         if (strcmp(t1temp,temp) == 0)        {            k=i;        //k记录相同时的最后一个字符的下标        }    }     for (i=0; i<N; i++)  //赋值给w[]    {        j=0;        if (i>=k && i<(k+T))      //在找到的k点处开始换值        {            w[i]=t2[j];             //换值            j++;        }        else        {            w[i]=s[i];        }    }         return w;} //主函数void main(){    char s[N];    char t1[T];    char t2[T];    int i;    int m;    char *p;     p=NULL;    printf("请输入字符串(20字符以内):");    scanf("%s",s);    printf("请输入将要被替换的子字符串(仅限两个字符):");    scanf("%s",t1);    printf("请输入将要用来替换的字字符串(仅限两个字符):");    scanf("%s",t2);    p=fun(s,t1,t2,&m);                     for (i=0; i<m; i++)              //将返回的值复制给数组以待输出    {        s[i]=p[i];    }         printf("结果为:");    for (i=0; i<m; i++)              //输出结果    {        printf("%c",s[i]);    }    printf("n");}

将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。
#include <stdio.h>#include <stdlib.h>#include <string.h> #define N 30/************************************************函数名称: fun*创建时间: 2010.12.6*描    述: 将s所指的字符串中ASCII值为奇数的字符删除,串中剩余字符形成一个新串放在t所指的数组中。*参    数: char * s,int * m*返 回 值: return t,(t为指向数组的指针)*局部变量: char * t;*           char temp[N];*           int i,j=0;************************************************/ char * fun(char * s,int * m){    char * t;    char temp[N];                   //临时的数组,用来存放t所指的数组    int i,j=0;         t=temp;    for (i=0; i<N; i++)    {        if (s[i]%2==0 )        {            temp[j]=s[i];           //如果是偶数,赋值给t所指的数组            j++;               if (s[i]=='')         //找到m的值先要找出输入了多少个字符            {                break;            }        }    }    *m=j;                           //找到m的值即输出结果的长度    t[j]='';    return t;} //主函数void main(){    char s[N];    int i;    int m;     char *p;     p=NULL;    printf("请输入字符串(30字符以内):n");    scanf("%s",s);    p=fun(s,&m);                    //刚开始没定义出这个m来现限制指针p所指数组的长度就出现了后面两个字符乱码    for (i=0; i<m; i++)              //将返回的值复制给数组以待输出    {        s[i]=p[i];    }         printf("结果为:");    for (i=0; i<m; i++)              //输出结果    {        printf("%c",s[i]);    }    printf("n");}
摘自:http://www.nowamagic.net/librarys/veda/detail/842



原创粉丝点击