zoukankan      html  css  js  c++  java
  • 三道C语言字符串操作的笔试题

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

    #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



  • 相关阅读:
    扫面线模板
    (动态规划、栈)leetcode 84. Largest Rectangle in Histogram, 85. Maximal Rectangle
    tmux 常见命令汇总
    leetcode 221
    leetcode 319 29
    (贪心)leetcode 392. Is Subsequence, 771. Jewels and Stones, 463. Island Perimeter
    leetcode 982 668
    Python import 同文件夹下的py文件的函数,pycharm报错
    Windows里Anaconda-Navigator无法打开的解决方案
    Windows下 gpu版 Tensorflow 安装
  • 原文地址:https://www.cnblogs.com/CodeWorkerLiMing/p/12007621.html
Copyright © 2011-2022 走看看