一道字符串处理的题~
#include<iostream>
#include<string.h>
#include<string>
#include<sstream>
using namespace std;
int main()
{
int n;
cin>>n;
while(n--)
{
string s;
cin>>s;
int m=s.size();
string s1="";
//char b[20];
for(int i=0;i<m;)
{
char ch=s[i];
int a=1;
for(int j=i+1;j<m;j++)
{
if(s[j]==ch) a++;
else break;
}
if(a>1)
{
string s2="";
stringstream ss;
ss<<a;
ss>>s2;
//memset(b,'\0',sizeof(b));
//sprintf(b,"%d",a);
//s2=b;
s1+=s2;
}
s1+=ch;
i+=a;
}
cout<<s1<<endl;
}return 0;
}
小结:
1>将int,double类型转化为字符串类型:
c语言:
char buf[];
int a;
double a;//精确到小数点后六位
sprintf(buff,"%d",a);<stdio.h>
c++:
stringstream ss;<sstream>
string s;
int a;
double a;//只能保留小数点后五位
ss<<a;
ss>>s;
2>将string类型转化为int,float类型:
string str("1234.1");
const char *p;
char *a;
p = str.c_str();<string.h>
float n = atof(p);//只能保留到小数点的后两位。
int n=atoi(p);<stdio.h>
strtod(p,&endptr)//p为要被转化的字符串,endptr指向停止转换的字符串,精确到小数点的后五位,头文件<stdlib.h>.