「菜魚」課設中的的字元處理(cpp)

2021-08-03 02:36:13 字數 2022 閱讀 6949

設計題

2、字元處理

設計函式,實現英文本元的大小寫轉換並去除其他字元。要求:字串中的小寫字元自動變換成對應的大寫字元,而大寫字元則變換成對應的小寫字元。另,如果字串中存在除英文大小寫之外的字元請去除掉。

————————————————————這是我們課設中的一道題—————————————————————————

個人認為,大小寫字母的轉換還算簡單,我能想到的方法是,用ascii表,小寫字母比大寫字母大32,再利用迴圈和字元型資料的加減就可以解決啦。但是字元的刪除就沒那麼簡單。我開始的想法是令字元等於零,感覺上行得通,一下是我的原始碼。

#includeusing namespace std;

void convert(char a) //定義轉換函式

for (i = 0; a[i]; i++)

cout << a[i];

}int main()

可是...執行結果是醬紫的:

可以發現數字是被刪除了沒錯,可是數字後面的東西也沒有了,就像是字串到這路就結束了,所以刪除字元並不是簡單地將零賦值給字元。原因是:ascii值為0的字元對應的是空字元\0,它的意義是「字串結束符」,字串遇到第乙個\0就會認為該字串到此結束。so...需要改進。

最簡單的解決方法是:掃瞄字串中的字元,每當遇到需要刪除的字元時,當前字元後的所有字元從前到後向前移動一位。以下是改動後的原始碼:

#includeusing namespace std;

void convert(char a) //定義轉換函式

else if (a[j] >= 'a'&&a[j] <= 'z')

else

}cout << a;

}int main()

我又新增了乙個迴圈變數j,相當於構建了乙個「隱字元陣列」,a[j]是隱的,用它來給a[i]的元素賦值,當遇到字母元素時a[j]變換大小寫賦值給a[i],當遇到非字母元素時,i減一前移並不賦值,這樣就達到了不輸出非字母字元的效果。但是執行結果還是存在問題的:

可以看到,生成的字串達到了題設中的兩個要求,但是似乎它始終恪守著要與原字串長度統一的原則,在正常生成的字串後面會隨機帶上幾個字母以補充因刪除了數字而留下的空位,這是我們不想要的。我有思考過可否考慮只輸出前幾個字元或是在應該生成的字串後面加上字串結束符,可是試了半天未能如願...哎有閒心了再慢慢試吧,再加上這個用字元陣列方法太"c-style"了,所以我為了能不再糾結把題做出來改用string了...原始碼如下:

#include#includeusing namespace std;

void convert(string str) //定義轉換函式

string::iterator t = str.begin(); //得到指向字串開頭的iterator

while (t != str.end())

else

t++;

} cout << str;

}void convert(string str); //宣告

int main()

天啊用string實在是太方便了......根本不用考慮咋迴圈咋設定迴圈變數,只需要string中的幾個函式和乙個迭代器的東西就可以解決了。iterator迭代器相當於指標,同時又比指標好用得多。可見c++中的string使c++相較於c處理字元的能力要強大了許多!下面是執行結果,美滋滋:

CPP 巨集的字串處理

1 define a line line define b line a line define c int b line c int 行號 2 巨集定義涉及到字串連線 字串化 則引數 line 不繼續展開 define b line line define c int b line c int l...

VC 中的字元處理

總體簡介 由於字元編碼的不同,在c 中有三種對於字元型別 char,wchar t tchar。其實tchar不能算作一種型別,他緊緊是乙個巨集。我們都知道,巨集在預編譯的時候會被替換成相應的內容。tchar 在使用多位元組編碼時被定義成char,在unicode編碼時定義成wchar t。1.vc...

PLSQL中的 字元處理

以前碰到過這個問題,後來忘了 這次正好同事遇到這個問題,記錄一篇日誌備忘。問題很容易描述,就是在sql語句中的字串 現了 符號,當執行的時候會被認為是引數需要傳遞,如update product set brand d g 解決辦法是把語句改為 update product set brand d ...