程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 三道C語言字符串操作的筆試題

三道C語言字符串操作的筆試題

編輯:關於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");
}

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved