c++string常用用法总结1

一定要引用的包

#include <cstring>//有时候不能去掉c,如果要用strlen函数的话

获取string字符串的长度

str.size(); //这两者都能求得string的长度
str.length();//记得自己赋初值

获取char型数组的长度

char ch[100];
strlen(ch);//查找到‘\0’停止计数,所以此方法获取char型数组的长度不定
           //因为char型数组不会自动在末尾添加‘\0’,除非自己手动在末尾添‘\0’
           //但是String会,但不能用来获取String的长度
sizeof(ch);//获得的是所占用的内存空间,此例输出为100

string查找特定字符串

string str,str_first;//记得自己赋初值
 if(str.find(str_first)!=string::npos)
 {
        cout<<“字符串str不包含特定字符串str_first”<<endl;
 }
 else
 {
        cout<<“字符串str包含特定字符串str_first”<<endl;
 }

string转char[]或char*

方法一:

String str;//记得自己赋初值
char p[40001];
str.copy(p, str.size(), 0);//表示把str的值复制给p数组
 //第二个空格表示:复制的长度,一般是把整个字符串复制给p数组
//第三个空格表示:从字符串str的第几个开始复制(和数组下标一样,从0开始,不是1)

方法二:

string str ;//记得自己赋初值
const char* p = str.data();//不能去掉const,也不能直接转成char[]

方法三:

string str;//记得自己赋初值
const char *p = str.c_str();//不能去掉const,也不能直接转成char[]

char[]转string

string str;
char p[100];//记得自己赋初值
str=p;//覆盖掉
str+=p;//在string后面追加

输入一行到char[],忽略空格,遇换行符结束输入

#include <stdio.h>//必须引用
char a[50000];
getchar();//如果前面有过输入,并且按过换行,则必须加,因为缓存区里面第一个就是换行
         //getchar是从缓存区里面拿值,char型值
while(gets(a)){//必须是char数组,此时输入遇到换行符停止输入,遇到空格不会停止输入
         //执行剩余的操作
}

输入字符串,去除非字母

int k=0,len=100;
char a[len];
for(int i=0;i<len;i++){
	if (('A'<=a[i]&&a[i]<='Z')||('a'<=a[i]&&a[i]<='z'))//是字母
	  {
	         a[k++]=a[i];//最后得到的k才是a数组的长度,但是数组a的实际长度是i(或者说是len),所以后面用时,要注意这一点;
	  }
 }       

char[],string字母转大写,转小写

原生态方法:

char a[100];
if('A'<=a[i]&&a[i]<='Z')
 {
      a[i]+=32;//转小写,如果只需要转大写,则注释该行
 }
if('a'<=a[i]&&a[i]<='z')
 {
      a[i]-=32;//转大写
 }

库提供方法:string转大小写

 #include <algorithm> //必须引用
 string str="abCd12#$%";
transform(str.begin(), str.end(), str.begin(), ::toupper); //转大写,遇到非字母也没事
transform(str.begin(), str.end(), str.begin(), ::tolower); //转小写

库提供方法:char转大小写

scanf("%s",ch);
int len=strlen(ch);
for(int i=0; i<len; i++)
{
  ch[i]=towlower(ch[i]);
}
printf("%s\n",ch);

字符串拼接

string str="";
str+="abc";//要使这一行拼接有效,上面str的定义必须是string str="" , 不能是string str;然后直接去拼接

//错误示范
string str;
str+="abc";

字符串拼接double/int,并去掉小数点后面的数值

double header=1403636631463555584.000000;
//直接转成int 会超过int能表示的最大数值范围
stringstream ss;
ss<<header;
string str="";
str+=ss.str();
cout<<str<<endl;
但是如果小数点后面是非0值,得自己试验才知道

但是这样会采用科学计数法,百度了很多人的说法 都不适合我
最终解决方案:
str+=to_string(header);
//我是只需要小数点前面的数值,也不需要四舍五入
istringstream sin_img(main_name);
vector<string> fields_img; //声明一个字符串向量
string field_img;
while (getline(sin_img, field_img, '.')) //将字符串流sin中的字符读入到field字符串中,以逗号为分隔符
{
    fields_img.push_back(field_img); //将刚刚读取的字符串添加到向量fields中
}
main_name=fields_img[0];
这样输出就不会采用科学计数法,而且即便header一开始是采用科学计数法,这样转成的string 也不会是科学计数法,至于精度问题 可能需要关注一下

如果double取值在int的取值范围内 下面的示范也是错的
//错误示范
double header=3.000000;
int header_int=(int)header;
string str="";
str+=header_int;
这样绝对不会输出3的 因为str=""const char[],3实际是地址+3

//正确示范
int header_int=3;
string str="";
str+=to_string(header_int);
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值