uva 10815 紫書vector應用例題
阿新 • • 發佈:2018-12-14
題目要求:
輸入文字 ,輸出文字中所有不同的單詞,注意字母及順序相同大小寫不同的單詞是同一個單詞,且標點符號不輸出。
程式碼:
#include <stdio.h> #include<string.h> #include<algorithm> #include<iostream> #include<vector> #include<sstream> #include<set> using namespace std; set<string> dict; int main() { string s,buf; while(cin>>s) { int i; for(i=0;i<s.length();i++) if(isalpha(s[i]))//判斷字元是否為字母 s[i]=tolower(s[i]);//統一改為小寫字母 else s[i]=' ';//若不是字母給為空格 stringstream ss(s); //講s輸入給流ss while(ss>>buf) dict.insert(buf);//將流ss中的字串賦給buf。 } for(set<string>::iterator it=dict.begin();it!=dict.end();++it) //set中宣告it“指標”的固定格式 cout<< *it<<"\n"; return 0; }
分析:
1. stringstream ss(s);while(ss>>buf)
(1)用法:從s中提取字串寫入buff中。
字串流是通過空格判斷一個字串的結束
(2)stringstream不會主動釋放記憶體(或許是為了提高效率),但如果你要在程式中用同一個流,反覆讀寫大量的資料,將會造成大量的記憶體消 耗,因些這時候,需要適時地清除一下緩衝 (用 stream.str("") )。
(3)getline的用法。getline(cin,line) stringstream stream(line); while(stream>>word){cout<<word<<endl;}
補充。
sprintf函式
int main(){ char str[256] = { 0 }; int data = 1024; //將data轉換為字串 sprintf(str,"%d",data); //獲取data的十六進位制 sprintf(str,"0x%X",data); //獲取data的八進位制 sprintf(str,"0%o",data); const char *s1 = "Hello"; const char *s2 = "World"; //連線字串s1和s2 sprintf(str,"%s %s",s1,s2); cout<<str<<endl; return 0; }
sscanf函式
int main(){
char s[15] = "123.432,432";
int n;
double f1;
int f2;
sscanf(s, "%lf,%d%n", &f1, &f2, &n);
cout<<f1<<" "<<f2<<" "<<n;
return 0;
}