C++字串切割
新手為了要解題目,如果概念對了,想寫出來,但偏偏題目的輸入要用空白隔開ex:how are you,那要怎辦?
上課一般老師都不會教這個,或不提起這個,因為這都要自己去找~~
#include <sstream> //用字串需要這個,可以字轉整數,反之也是用這個喔 using namespace std;
int main()
{
vector<string>arr; //設一維陣列arr
string input; //字串input , token
string token;
int c=0; //用來記錄放的陣列位置,每空白放一個,從arr[0]開始
getline(cin,input); //使用者輸入 ex:how are you, 注意只有讀一行
istringstream delim(input); //將打好的東西放到字串delim裡,包含空白
while(getline(delim,token,' ')) //getline(delim[來源位置],token[存入位置],' '[分割的條件])
{
arr.push_back(token); //ex: arr[0] = token ="how"
c++; //換arr[1]
}
for(int j=0;j<c;j++) //印出來
{
if(j!=c-1) //印到字串最後前一個
cout <<arr[j]<<' ';
else
cout << arr[j]<<endl; //印最後一個字,換行,這是避免最後是空白,上傳資料會錯誤
}
}
對輸入做一些整理好了:
1.讀一行
string s;
getline(cin , s);
或
char s[100];
cin.getline(s,100);
2.讀全部
string s;
getline(cin , s, EOF);
或
char s[1000];
cin.getline(s, 1000 , EOF);
3.讀字串,直到遇見空白,換行(假如打:how are you)
string s1,s2;
cin >>s1 >>s2;
cout <<s1<<' '<<s2; //執行後:how are
或
char s1[10],s2[10];
cin >>s1 >>s2;
cout <<s1<<' '<<s2; //同理
4.讀到特定字元(可以是' ' , '$' , '#' .....等)
string s;
getline( cin , s ,' ' );
或
char s[10];
cin.getline( s1 , 10 ,' ' );
5.交換 swap
string s1,s2;
cin >>s1 >>s2;
s1.swap(s2);
cout <<s1<<' '<<s2; //執行後:are you
或
char s1[10],s2[10],temp[10]; //temp 是暫存值
cin >>s1 >>s2;
strcpy(temp,s1);
strcpy(s1,s2);
strcpy(s2,temp);
cout << s1 << ' ' <<s2;
6.比大小 ( 根據ASCII )
string比較簡單,你會吧~~
char s1[10],s2[10];
if(strcmp (s1,s2) >0) {~~~};
結果為負 s1<s2: abc 和 edf ; 等0就一樣 ; 正就反之
7.字串接字串
string s1,s2;
s1 += s2;
或
char s1[10],s2[10];
strcat(s1,s2);
end!!