一、cin从文本中读取字符串,遇到空格、回车都结束。 例如:string str; cin>>str; 二、sscanf,从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed var1, mixed var2 ... ); int scanf( const char *format [,argument]... ); 例子: 1. 常见用法。
char buf[512] = {0}; sscanf("123456 ", "%s", buf); printf("%s/n", buf); 结果为:123456 | 2. 取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。
sscanf("123456 ", "%4s", buf); printf("%s/n", buf); 结果为:1234 | 3. 取到指定字符为止的字符串。如在下例中,取遇到空格为止字符串。
sscanf("123456 abcdedf", "%[^ ]", buf); printf("%s/n", buf); 结果为:123456 | 4. 取仅包含指定字符集的字符串。如在下例中,取仅包含1到9和小写字母的字符串。
sscanf("123456abcdedfBCDEF", "%[1-9a-z]", buf); printf("%s/n", buf); 结果为:123456abcdedf | 5. 取到指定字符集为止的字符串。如在下例中,取遇到大写字母为止的字符串。
sscanf("123456abcdedfBCDEF", "%[^A-Z]", buf); printf("%s/n", buf); 结果为:123456abcdedf | 6、给定一个字符串iios/12DDWDFF@122,获取 / 和 @ 之间的字符串,先将 "iios/"过滤掉,再将非'@'的一串内容送到buf中
sscanf("iios/12DDWDFF@122", "%*[^/]/%[^@]", buf); printf("%s/n", buf); 结果为:12DDWDFF | 7、给定一个字符串““hello, world”,仅保留world。(注意:“,”之后有一空格)
sscanf(“hello, world”, "%*s%s", buf); printf("%s/n", buf); 结果为:world %*s表示第一个匹配到的%s被过滤掉,即hello被过滤了 如果没有空格则结果为NULL。 | 三、gets或者getline读取一行的字符串。 几个简单的示例: 例1: #include using namespace std; char temp[10000]; gets(temp);//整行输入 istringstream is (temp);//转成一个输入流 while(is>>t)//把这个流里面的数一个一个输入 a[i].push_back(t); 例2: void CMyDlg::OnReadtraingdata() { // TODO: Add your control notification handler code here CString str; int starttime=clock(); FILE *in; if(!(in=fopen("train.txt","r"))) { MessageBox("不存在train.txt文件","ERROR",MB_ICONWARNING); return; } hour.resize(3600); train.clear(); int i,k; char str1[14402],a[40]; while(fscanf(in,"%s",&a)!=EOF) { fscanf(in,"%s",&a); fscanf(in,"%s",&a); fscanf(in,"%s",&a); fscanf(in,"%s",&a); fscanf(in,"%s",&str1); hour.clear(); for(i=0;i<14400;i+=4) { k=chartonum(str1[i],str1[i+1]); hour.push_back(discrete[k]); } train.push_back(hour); } fclose(in); str.Format("reading data cost %d ms/nreading %d train hours's data",clock()-starttime,train.size()); MessageBox(str,"data reading finished^_^"); readtrain=true; btAchieve= (CButton*)GetDlgItem(IDC_READTRAINGDATA); btAchieve->EnableWindow(FALSE);//TRUE为可用状态,FALSE为不可用状态 } 也可以用fscanf 跟scanf的用法一样 |