c++的字符串
字符串不是太難,但特別多細節,一不註意就會錯qaq
到現在為止都沒打完。。。
但還是先寫了。。。(先聲明,本人Pascal轉c++,打程序時總少不了尷尬。。。)
1。輸入輸出
輸入:
1)scanf:(可讀入多個字符串)
如scanf("%s%s%s",&s1,&s2,&s3)到空格就換一個
一定要加&,不然會錯,吃了好多次虧%>_<%
2)gets(只能讀一個字符串,好處是可以一下讀一行,很好用。。)
輸出:
1)printf:
只輸出字符串,不輸出單個字符,(和pascal差挺遠)
2)puts(字符串和換行符,直接換行,很棒。。)
當然輸入還有一種很作弊的方法:
看下題:
一個句子中也許有多個連續空格,過濾掉多余的空格,只留下一個空格。
Input
一行,一個字符串(長度不超過200),句子的頭和尾都沒有空格。
Output
過濾之後的句子。
Sample Input
Hello world.This is c language.
Sample Output
Hello world.This is c language.
#include<cstdio> #include<cstring> #include<iostream> using namespace std; int main() {string s; while (cin>>s) cout<<s<<‘ ‘; }
迷之方法。。。
2。一些字符串處理函數(單個字符串處理下面說)
左函數格式,右函數功能
strupr(字符串名) | 將字符串中小寫字母換成大寫字母 |
strcat(字符串名1,字符串名2) | 將字符串2連接到字符串1後邊,返回字符串1的值。 |
strncat(字符串名1,字符串名2,長度n) | 將字符串2前n個字符連接到字符串1後邊,返回字符串1的值。 |
strcpy(字符串名1,字符串名2) |
將字符串2復制到字符串1後邊,返回字符串1的值。 |
strncpy(字符串名1,字符串名2,長度n) | 將字符串2前n個字符復制到字符串1後邊,返回字符串1的值。 |
strcmp(字符串名1,字符串名2) | 比較字符串1和字符串2的大小,比較的結果由函數帶回; 如果字符串1>字符串2,返回一個正整數; 如果字符串1=字符串2,返回0; 如果字符串1<字符串2,返回一個負整數; |
strncmp(字符串名1,字符串名2,長度n) | 比較字符串1和字符串2的前n個字符進行比較,函數返回值的情況同strcmp |
strlen(字符串名) | 計算字符串的長度,終止符’\0’不算在長度之內 |
strlwr(字符串名) | 將字符串中大寫字母換成小寫字母 |
目前沒怎麽用到,但以後難題還是挺有用的。。。(難題就是一個個小模板混在一起。。)
3.insert() //插入字符
erase() //刪除字符
clear() //刪除全部字符
replace() //替換字符
(這些天常用的)
4。說一說打字符串面臨的問題
1)超級麻煩的字符串讀入(但後來發現的puts和gets好用到爆炸。。)
還有一種很巧妙的方法
char a; string s=""; while ((scanf("%c",&a)==1)&&(a!=‘\n‘)) { s+=a; }
雖然很蠢,還是可以用的。。。
2)一個小細節:字符串的都是從0開始截取字符,如果不註意,超容易錯。。。
3)針對單個字符串,有很多方法完成程序
但前面一定要加s.(s為簡單的字符串)
練字符串的特別感悟:
當你的程序出問題運行不到時,
1.想想你的數組是不是開大了(不要問我為什麽)
2.想想用scanf有沒有加&(錯最多)
3.想想你的字符能不能換行(不能的話改)
4.你的字符最好從0輸入
c++的字符串