1.7编程基础之字符串 24:单词的长度
注意头文件 #include<string>和#include<cstring>不通用
1 #include<iostream> 2 #include<string> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 char a[1001]; 7 int main() 8 { 9 // cin>>a;cout<<strlen(a); 10 // while(cin>>a){cout<<','<<strlen(a); }//最简方法 ,cin和scanf("%s",s)类似,遇到空格结束。 11 int len,s=0,word=0; 12 gets(a); //使用cstdio头文件 13 len=strlen(a); //在niop题库中需使用cstring头文件 ,虽然可能在windows下不用 14 for(int i=0;i<len;i++) 15 { 16 17 if(a[i]==' '&&word==0) 18 { 19 cout<<s<<',';word=1;s=0; 20 } 21 else if(a[i]!=' ') 22 { 23 s++;word=0; 24 } 25 26 } 27 cout<<s<<endl; 28 return 0; 29 }
上面程序只适用于输入数据只有一行的情况,下面使用geline,stringstream解决多行输入问题
stringstream字符串流可以实现类似sscanf和sprintf的功能:
#include<iostream>
#include<string>
#include<cstring>
#include<sstream>
using namespace std;
int main()
{
string s;char a[1001];
while(getline(cin,s))
{
int t=1;
stringstream ss(s);
for(int i=0;ss>>a;i++)
{
if(t){ t=0;cout<<strlen(a); }
else cout<<','<<strlen(a);
}
}
return 0;
}
下面是一个 stringstream字符串流的例子
/*读入两个整数,中间用空格隔开,输出他们的和*/
#include <cstdio>
#include <sstream>
#include <iostream>
#include<string>
using namespace std;
#define MAXN 100010
int main()
{
char s[1000];
cin.getline(s,1000,'\n');
//string s;getline(cin,s); //用这句功能类似
stringstream ss(s);
int a,b;
ss>>a>>b; //类似sscanf(s,"%d%d",&a,&b);
cout << a+b << "\n";
return 0;
}