以下作業,後面的題目可以使用前面題目設計的函數。

1.寫一程式將傳入的字母大寫轉小寫,小寫轉大寫,其他字元則不變。 (C 版)

函數原型
void TrnCap(char *)

說明:
傳入 1 字元, 若該字元為大寫字母, 則轉成小寫, 若該字元為小寫字母, 則轉成大寫, 其他字元則不變。

傳入
字元 c

傳回
若字元 c 為大寫字母,則轉成小寫。若為小寫字母,則轉成大寫。其他字元則不變。

使用範例:
char c;
scanf("%c",&c);
printf("c=%c\n",c);
TrnCap(&c);
printf("c=%c\n",c);


將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <stdio.h>
#include <stdlib.h>
void TrnCap(char *c) {
//寫下你的程式碼

}
int main(int argc, char *argv[]) {
     char c;
     scanf("%c",&c);
     printf("c=%c\n",c);
     TrnCap(&c);
     printf("c=%c\n",c);
     return(0);
}


    

解答

2.寫一程式將傳入的字母大寫轉小寫,小寫轉大寫,其他字元則不變。 (C++ 版)

函數原型
void TrnCap(char &)

說明:
傳入 1 字元, 若該字元為大寫字母, 則轉成小寫, 若該字元為小寫字母, 則轉成大寫, 其他字元則不變。

傳入
字元 c

傳回
若字元 c 為大寫字母,則轉成小寫。若為小寫字母,則轉成大寫。其他字元則不變。

使用範例:
char c;
scanf("%c",&c);
printf("c=%c\n",c);
TrnCap(&c);
printf("c=%c\n",c);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;
void TrnCap(char &c) {
//寫下你的程式碼

}
int main(int argc, char *argv[]) {
     char c;
     cin >> c;
     cout << c << endl;
     TrnCap(c);
     cout << c << endl;
     return(0);
}


    

解答

3.寫一程式將傳入的字串裡,所有大寫轉小寫。(本題請使用上面題 1 或題 2 的副程式 TrnCap)
(C++ 版)
函數原型
void LowCap(string &)

說明:
傳入一字串,裡面若有大寫字母,則轉成小寫字母,其餘字元不變。

傳入
字串 s

傳回
將字串 s 內所有大寫轉小寫。

使用範例:
char s[]="Hello~ John";
printf("s=%s\n",s);
LowCap(s);
printf("s=%s\n",s);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
#include <string>
using namespace std;
void TrnCap(char &c) {
//上面題2的程式碼
}
void LowCap(string &s){
//寫下本題你的程式碼

}
int main(int argc, char *argv[]) {
     string s="";
     getline(cin , s); //整行輸入,包括空白
     LowCap(s);
     cout << s << endl;
     return(0);
}




解答

4.寫一程式將傳入的字串裡,所有小寫轉大寫。(本題請使用上面題 1 或題 2 的副程式 TrnCap)
(C 版)
函數原型
void UpCap(char *)

說明:
傳入一字串,裡面若有小寫字母,則轉成大寫字母,其餘字元不變。

傳入
字串 s

傳回
將字串 s 內所有小寫轉大寫。

使用範例:
char s[]="Hello~ John";
printf("s=%s\n",s);
UpCap(s);
printf("s=%s\n",s);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;
void TrnCap(char *c) {
//題 2 的程式碼
}
void UpCap(char *s){
//寫下本題你的程式碼

}
int main(int argc, char *argv[]) {
     char s[100];
     cin.getline(s,100);
     UpCap(s);
     cout << s << endl;
     return(0);
}




解答

5.寫一字串處理函式,可以傳回字串長度。

函數原型
int strLen(char *)

說明:
傳入字串指標, 程式傳回 p 字串有幾個字。

傳入
字串

傳回
字串字元數量(字串長度)

使用範例:
char x[100];
scanf("%[^\n]",x);//能接受空白
k=strLen(x);
printf("str=%s , len=%d\n",x,k);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;
int strLen(char x[]){
   //寫下你的程式碼

}

int main(int argc, char** argv) {
     char a[100];//容納 99 字
     cin.getline(a,99);
     cout << "str=" << a << " , len=" << strLen(a);
     return 0;
}



解答

6.寫一字串統計函式。

函數原型
int CapSta(char *, int *, int *)

說明:
傳入一字串及兩整數變數,程式統計大小寫字母數量,並分別放在兩變數,程式傳回非英文字母數量。

傳入
一字串及兩整數

傳回
字串大寫數量、小寫數量及非英文字母數量

使用範例:
char *x[100];
int a,b,c;
scanf("%[^\n]",x);
c=CapSta(x, &a, &b);
printf("Upcase=%d\nLowcase=%d\nOther=%d\n",a,b,c);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;
int CapSta(char *x, int *a, int *b){
   //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100]; //容納 99 字
     int a, b, c;
     cin.getline(x,99);
     c = CapSta(x, &a, &b);
     cout << "Upcase=" << a << endl;
     cout << "Lowcase=" << b << endl;
     cout << "Other=" << c << endl;
     return 0;
}




解答

7.寫三個去字串空白函式。LTrim 為去字串前空白。RTrim 為去字串後空白。Trim 為去字串前後空白。

函數原型
void LTrim(char *)
void RTrim(char *)
void Trim(char *)

說明:
傳入字串指標 p , 程式將 p 字串之前後空白去除。

傳入
一字串

傳回
LTrim 將字串前空白去除。
RTrim 將字串後空白去除。
Trim 將字串前後空白去除。

使用範例:
char x[]=" Tx ";
char y[]=" Ty ";
char z[]=" Tz ";
printf("[%s]=>",x);
LTrim(x);
printf("[%s]\n",x);
printf("[%s]=>",y);
RTrim(y);
printf("[%s]\n",y);
printf("[%s]=>",z);
Trim(z);
printf("[%s]\n",z);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;

void LTrim(char *p){
   //寫下你的程式碼

}
void RTrim(char *p){
   //寫下你的程式碼

}
void Trim(char *p){
   //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100]; //容納 99 字
     cin.getline(x,99);
     cout << "[" << x << "]=>[";
     LTrim(x);
     cout << x << "]" << endl;
     cin.getline(x,99);
     cout << "[" << x << "]=>[";
     RTrim(x);
     cout << x << "]" << endl;
     cin.getline(x,99);
     cout << "[" << x << "]=>[";
     Trim(x);
     cout << x << "]" << endl;
     return 0;
}



解答

8.寫一字串搜尋函式。

函數原型
int instr(char *a, char *b)

說明:
傳入目標字串 a 及搜尋字串 b, 程式將搜尋 a 字串中,含有 b 字串的起始位置。

傳入
目標字串及搜尋字串

傳回
搜尋字串在目標字串的起始位置(以 0 為起點)。若不存在則傳回 -1

使用範例:
int i;
i=instr("Acd 2Cd3","Cd");
printf("i=%d\n",i);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;

int instr(char *a,char *b){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100],y[100]; //各容納 99 字
     cout << "x=";
     cin.getline(x,99);
     cout << "y=";
     cin.getline(y,99);
     cout << instr(x,y);//求 y 在 x 第一次出現的位置
     return 0;
}


   

解答

9.寫一字元複製函式。 (動態配置記憶體)

函數原型
void nChar(char c , int n , char **t)

說明:
傳入字元 c 及 整數 n , 程式將產生 n 個 c 字元在 t 字串中 。

傳入
字元 c 及複製數量 n。

傳回
產生 n 個 c 字元,放入 t 字串。

使用範例:
char *x;
nChar("F", 6, &x);
printf("x=%s\n",x);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;

void nChar(char c , int n , char *x){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char *x, y;
     int n;
     cout << "char = ";
     cin >> y;
     cout << "number: ";
     cin >> n;
     nChar(y, n, &x);
     cout << x << endl;
     return 0;
}


 

解答

10.寫一字串連接函數。(被連接字串需自備空間)
    (本題可以使用前面寫過的函式)
函數原型
char *strCon(char *a, char *b)

說明:
傳入目標字串 a 及連接字串 b,程式會將 b 字串連接在 a 字串之後,
呼叫函數時,必須保證 a 字串有足夠空間容納 a 與 b 字串的總長度。

傳入
被連接字串 a 、連接字串 b

傳回
a 字串變成 a 與 b 字串連接後的新字串,並傳回 a 字串。

使用範例:
char x[100]="1234";// 4 個字
char y[]="ABC"; //3 個字
char *z;
z=strCon(x, y); // 3 + 4 = 7 個字,再加字串結尾, 共 8 個字, 在 100 字內
printf("x=%s\ny=%s\nz=%s\n",x, y, z);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;
int strLen(char *p){
     //使用前面的函式

}
char *strCon(char *a, char *b){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[101], y[50];//101-50-1, x 最多只能 50 字
     char *z;
     cout << "x = ";
     cin >> x;
     cout << "y = ";
     cin >> y;
     z = strCon(x, y);
     cout << z << endl;
     return 0;
}




解答

11.寫一個字串連接函數。
    (本函式可以使用前面寫過的函式)

函數原型
char *strNCon(char *a, char *b, int n);

說明:
傳入目標字串 a 、連接字串 b 及連接位置 n,程式會從 a 字串的第 n 個字開始接上 b 字串,
a 的第 n 個字以後會被切除,但若 n 大於 a 字串的長度,b 字串還是緊接在 a 字串後面。
程式傳回 a 字串。
本函數 a 字串空間必須足夠容納 a 與 b 字串合併後的字串長度。

傳入
標字串 a 、連接字串 b 、連接位置 n

傳回
a 字串 (a = a 字串第 n 字以後改為 b 字串)

使用範例:
char x[]="1234567";
char *y;
y = strcon(x, "ABC", 2);
printf("x=%s\ny=%s\n",x,z);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>

using namespace std;

int strLen(char *p) {
     //寫下前面完成的程式碼

}

char *strCon(char *a, char *b) {
     //寫下前面完成的程式碼

}
char *strNCon(char *a, char *b, int n) {
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100], y[100];//各 99 字
     int n;
     cout << "x = ";
     cin >> x;
     cout << "y = ";
     cin >> y;
     cout << "n = ";
     cin >> n;
     strNCon(x, y, n);
     cout << x << endl << y << endl;
     return 0;
}

 

解答

另一種 C++ 的 string 寫法:

函數原型
string strConN(string &a, string b, int n);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;

string strNCon(string &a, string b, int n){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     string x, y, z;
     int n;
     cout << "x = "; cin >> x;
     cout << "y = "; cin >> y;
     cout << "n = "; cin >> n;
     z = strNCon(x, y, 2);
     cout << x << endl << y << endl << z << endl;
     return 0;
}

解答

12.寫一個字串拷貝函式。(需自備空間)
     本題請盡量使用前面的函數。

函數原型
char *strCopy(char *a, char *b);

說明:
傳入被拷貝字串 a 及拷貝字串 b , 程式將字串 a 拷貝至 b 字串。
b 字串必須足夠容納 a 字串空間。

傳入
被拷貝字串、拷貝字串

傳回
拷貝字串 。

使用範例:
char x[100]="1234";
char y[100];
char *z;
z = strCopy(x, y);
printf("y=%s\nz=%s\n", y, z); //結果:1234 及 1234

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>

using namespace std;

char *strCopy(char *a, char *b) {
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char a[100], b[100], *c;
     cout << "a="; cin >> a;
     c = strCopy(a, b);
     cout << "a=" << a << endl << "b=" << b << endl << "c=" << c << endl;
     return 0;
}



解答

13.寫一函式搜尋字串並替換新字串。(需自備空間)
     本題請盡量使用前面的函數。

函數原型
void SDstr(char *a, char *b, char *c);

說明:
傳入目標字串 a 及搜尋字串 b , 程式在字串 a 中若找到 b 字串,
則將 a 字串裡的 b 字串替換成 c 字串。
a 字串 必須足夠容納替換後的新字串空間。

傳入
目標字串、搜尋字串、替換字串

傳回
已替換過的字串,若搜尋字串不存在,則目標字串不變。

使用範例:
char x[100]="1234567";
SRstr(x,"45","WxYz");
printf("x=%s\n",x); //結果:123WxYz67

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>
using namespace std;
int strLen(char *p) {
     //寫下前面完成的程式碼

}

char *strCopy(char *a, char *b) {
     //寫下前面完成的程式碼

}

int instr(char *a, char *b) {
     //寫下前面完成的程式碼

}

char *strCon(char *a, char *b) {
     //寫下前面完成的程式碼

}

char *strNCon(char *a, char *b, int n) {
     //寫下前面完成的程式碼

}

void SDstr(char *a, char *b, char *c) {
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char a[100], b[100], c[100];
     cout << "a = "; cin >> a;
     cout << "b = "; cin >> b;
     cout << "c = "; cin >> c;
     SDstr(a, b, c);
     cout << a << endl << b << endl << c << endl;
     return 0;
}






解答

14.寫一字串插入函式。

函數原型
char *strIns(char *a, char *b, int n);

說明:
傳入目標字串 a、插入字串 b 及插入位置 n,函式將在 a 字串第 n 個字元插入字串 b。
若 n > 字串 a 的長度,則 b 字串接在 a 字串後面。
a 字串空間必須足夠容納插入後的新字串空間。

傳入
目標字串、插入字串、插入位置 n

傳回
已插入後的字串。

使用範例:
char x[]="1234567";
char *y;
y = str(x, "ABC", 2); //結果:12ABC34567
printf("x=%s\ny=%s\n", x, y);

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>

using namespace std;

int strLen(char *p) {
     //寫下前面完成的程式碼

}

char *strCon(char *a, char *b) {
     //寫下前面完成的程式碼

}

char *strNCon(char *a, char *b, int n) {
     //寫下前面完成的程式碼

}

char *strCopy(char *a, char *b) {
     //寫下前面完成的程式碼

}

char *strIns(char *a, char *b, int n){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100], y[100];//各 99 字
     int n;
     cout << "x = ";
     cin >> x;
     cout << "y = ";
     cin >> y;
     cout << "n = ";
     cin >> n;
     strIns(x, y, n);
     cout << x << endl << y << endl;
     return 0;
}


 

解答

15.寫一字串搜尋並刪除函式。
     本題請盡量使用前面的函數。

函數原型
char *strDel(char *a, char *b);

說明:
傳入目標字串 a 及搜尋字串 b , 程式在字串 a 中若找到 b 字串,
則將 a 字串裡的 b 字串替刪除, 並傳回 a 字串。(若有重複,需全部刪除)

傳入
目標字串、搜尋字串

傳回
已經刪除過的字串。

使用範例:
char x[100]="1234567";
strDel(x, "45");
printf("x=%s\n", x); //結果:12367

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>

using namespace std;

int strLen(char *p) {
     //寫下前面完成的程式碼

}

char *strCon(char *a, char *b) {
     //寫下前面完成的程式碼

}

char *strNCon(char *a, char *b, int n) {
     //寫下前面完成的程式碼

}

char *strCopy(char *a, char *b) {
     //寫下前面完成的程式碼

}

int instr(char *a, char *b){
     //寫下前面完成的程式碼

}

char *strDel(char *a, char *b){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100], y[100]; //各 99 字
     cout << "x = "; cin >> x;
     cout << "y = "; cin >> y;
     strDel(x, y);
     cout << x << endl << y << endl;
     return 0;
}





解答

16.寫一字串反轉函式。

函數原型
char *strRev(char *a);

說明:
傳入目標字串 a , 程式將 a 字串反轉 , 並傳回 a 字串。

傳入
目標字串

傳回
反轉後的字串。

使用範例:
char x[100]="12345";
printf("x=%s\n", strRev(x) ); //結果:54321

將下列程式碼 (Dev C++ 版本),複製至你的程式碼,並在副程式部份填入你的程式碼。

#include <iostream>

using namespace std;

void swap(char *a, char *b){
     //寫下前面完成的程式碼

}

int strLen(char *p) {
     //寫下前面完成的程式碼

}

char *strRev(char *a){
     //寫下你的程式碼

}

int main(int argc, char** argv) {
     char x[100];//各 99 字
     cout << "x = "; cin >> x;
     strRev(x);
     cout << x << endl;
     return 0;
}

 

解答