常用字符串操作
2021-04-20 本文已影响0人
乘瓠散人
- C语言中字符串的灵活性:
- 可以把任意“指向字符的指针”看成是字符串,从该位置开始,直到字符“\0”.
eg. 若s="(11,LL)"
,则&s[1]
对应的字符串是11,LL)
.
eg. 函数strchr(s,',')
返回字符串s中从左往右的第一个字符','的指针,因此strchr(s,',')+1
所对应的字符串是LL)
. - 如果想要让字符串下标从1开始输入,则
#include<iostream>
#include<stdio.h>
#include<cstring>
using namespace std;
int main()
{
char s1[205];
scanf("%s",s1+1);
int len=strlen(s1+1); //字符个数
for(int i=1;i<=len;i++)
cout<<s1[i];
return 0;
}
- C++在string头文件中定义了string类型,支持流式读写。string有很多方便的函数和运算符,但是速度慢。
#include<iostream>
#include<string>
#include<sstream>
using namespace std;
int main()
{
string line;
while(getline(cin,line))
{
int sum=0, x;
stringstream ss(line);
while(ss >> x) sum+=x;
cout<<sum<<endl;
}
return 0;
}
string类在<string>头文件中,stringstream在sstream头文件中。
首先用getline函数读取一行数据(相当于C语言中fgets,但由于使用string类,无须指定字符串的最大长度),然后用这一行创建一个字符串流ss,接下来只需像读取cin那样读取ss即可。
- 常用字符串处理函数
- strncpy: 复制字符串的子串
char* strncpy(char* dest, const char * src, size_t n );
将src串的前n个字符复制到dest串中,返回结果与dest相同。 - strcpy: 复制整个字符串到另一个字符数组
char* strcpy(char* dest, const char* src);
- strstr: 在字符串str1中寻找子字符串str2,如果有返回相应位置的指针,没有返回NULL
char* strstr(char* str1, char* str2);
- strchr: 在字符串中查找字符,成功返回该字符首次出现的位置,失败返回NULL
char* strchr(const char *s,char c);
- gets(s)函数
gets()函数用来从标准设备读取字符串直到换行符结束,但是换行符会被丢弃,然后在末尾添加'\0'字符。而scanf遇到空格就会认为当前字符串结束
gets()遇到'\n'停止读取,不会把'\n'包含到字符串里,但是其对应的puts()函数却在输出字符串时会自动换行
sprintf(buf, "%d%d%d%d%d", abc,de,x,y,z); //输入到缓冲区buf
sscanf(s, "%lf %d", &p, &q); //从s读取p,q
atof(str) 将字符串转成浮点数
atoi(str) 将字符串转成整数
头文件<stdlib.h>
#define BUFLEN 256
static char linebuf[BUFLEN];
fgets(linebuf,BUFLEN,fin); //读取一行数据,可以有空格
sscanf(linebuf,"%s %s %s",tokenString,typeString,lineMsg);
C++小数后保留2位
cout<<fixed<<setprecision(2)<<ans<<endl;
头文件为<iomanip>
C小数后保留2位
printf("%.2f\n",ans);