對一個字符串重新排列,字母排在前面,數字排在後面,並不改變原來字母之間以及數字之間的字符順序。
#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"); }