字符、字符数组、字符串及其函数(随时补充)

一、字符和字符数组

1.字符与数字的转换

字符虽然是char类型,但本质是一个ASCLL码,可以之间进行加减操作,加减完要是用cout输出默认是int类型,用printf可以自定义输出的类型。
一个字符可以通过+-一个int类型的数转换成int类型。一个int类型要是+-一个字符,结果还是int类型。
                                                  
一般字符"1"想转换成int 类型的数字1
如:
char a="1";
int b=a-'0';

2.计算字符数组的长度


对于字符数组,要求字符数组里有多少个字符,如char c[50],要用strlen(c),不包含结尾的\0,这个函数要cstring头文件。
如:
#include<cstring>
char s[10];
int len=strlne(s);

3.读入数据到字符数组

<1>输入流里面没有换行和空格时:

可以直接用for循环用cin或者scanf(%c)读入。

<2>输入流里面有换行和空格时:

若是有空格,可以使用cin.getline(a[]20),直接读入一行,空格也被读入。超过20的不会输入,少于20,输入多少是多少。完整函数应该是cin.getline(数组名,输入字符个数,结束符(char类型))

结束符不输入默认为换行。cin.getline()不用考虑末尾换行,cin.get()需要考虑
要是读取一行字符串时我们一般声明头文件cstring,用getline()和get()函数,这两个函数都读取一行输入,直到换行符就停。一般用get。
get(),将换行符保留在输出序列,有两个参数,
第一个参数是要被输入的数组,第二个参数是输入读取的字符数。cin.get(a[],b)。
但是要是要再读一行,要在两个get()函数中间行加一个cin.get()读掉那个换行符,否则下一个打不出来。也可以合并两个,如cin.get(a[],b).get();

getline()同上,但是输入完不保留换行符。
也可以合并如cin.getline(a[],b).getline(c[],d);

#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    char c[50];
    cin.getline(c,sizeof(c));
	return 0;
}

二、字符串及其函数

1.理解上

string是一个单独的类,c里面不能直接使用要有头文件string,string中每个元素实际上是char * 类型的。可以把一个字符串看成一个字符数组。

2.定义问题

一般又

一般有三种方法来定义一个字符串。
1,用string (const char * s)来定义字符串ss
2,用string(const string& str),使用一个string对象初始另一个string对象
3,用string name(int a,char c)把name定义为a个c
#include<iostream>
#include<string>
using namespace std;
const char* str="hello world";
int main()
{
    string ss(str);//方法1
    string ss2(ss);//方法2
    string ss3(10,'c');//方法3
    //但是一般就是直接定义出来
    string s="hello world";
    return 0;
}

3,string 基本操作,读入操作

string类型的变量可以直接+,-,=,+=操作。
#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    cin>>s;//没有空格和换行时
    getline(cin,s);//读入一行字符串,遇到空格不会停,要考虑换行符
    return 0;
}


4,重点!!!字符串函数(骚操作)

<1>字符串长度    s.size()    string


要求string类型的字符长度,如string s,要用s.size()或者s.length()来求。
求字符串数组一个元素的长度也可以用,如a[1].size()。size()获得的长度不包括\0。
#include<string>
#include<iostream>
using namespace std;
int main()
{
    string s="I am very handsome"
    int len=s.size();
}


<2>字符串反转    reverse()    algorithm


头文件为#include<algorithm>
可以通过reverse(s.begin(),s.end()) 也可以写成reverse(a,a+10),0~9,不包括10(类似sort)将一个字符串反过来,执行完s就被反过来。
如:
#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
int main()
{
    string s="hello world";
    reverse(s.begin,s.end());
    reverse(s,s+11);
} 


<3>查找指定子串    s.find()    cstring






str.find(str, begin=0, end=len(string))
str -- 指定检索的字符串
beg -- 开始索引,默认为0。
end -- 结束索引,默认为字符串的长度。
可以用s.find(“ddd”,int a,int b)来查找从a开始到b的字符串s里的指定子串"ddd"
返回子串首次出现的位置,返回值类型是int,所以要定义一个int变量来记录返回的位置。
如果没有找到,会返回一个很大的数,一般识别不了而默认为-1。
s.rfind()是从右向左找。
如:
#include<iostream>
#include<cstring>
#include<stirng>
using namespace std;
int main()
{
    string s="hello world";
    int len=s.size()
    int x=s.find("d",0,len);
    if(x==-1)
        cout<<"没找到";
}






<4>在字符串中插入字符串    s.insert()    cstring


s.insert(2,”wwww”)在位置2处开始,插入"wwww"
如:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    string s="ho world";
    s.insert(2,"ell");
    return 0;
}


<5>在字符串中删去字符    s.erase()    cstring


s.erase(5,7)从位置5处开始删除7个字符,包含位置5,即删除[5,12]的字符。
如:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    string s="hello abcde world";
    s.erase(7,6);
	return 0;
}


<6>获取字符串的子串    s.substr(a,b)


s.substr(1,3)从位置1处复制3个字符出来形成子串,取出来不会影响原字符串,
如:
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    string s="hello world";
    string s1=s.substr(0,5);
	return 0;
}


<7>字符串替换    s.replace()    cstirng 


s.replace(int a,int b,”aaaa”)把字符串s从第a个元素开始,后面的b个元素替换成”aaaa”,
不管你b和“aaaa“的长度,都全部替换掉。
#include<iostream>
#include<string>
#include<cstring>
using namespace std;
int main()
{
    string s="hello world";
    s.replace(0,5,"goodbye");
	return 0;
}


<8>   字符串拷贝函数    strcpychar1[]char2 [])    


<9>字符串转换成n进制    stoi(字符串名,起始位置,n进制)

Devc++里不能用这个函数,牛客可以用,这个函数好像不是标准函数,能不用就不用

#include<string>//头文件是string
using namespace std;
int main()
{
    string s="1234567";
    int a=stoi(s,0,10);
    //也可以int a=stoi(s),因为默认从0位置开始,默认转化成十进制
    cout<<a;
    return 0;
}

<10>将数字常量转换成字符串    to_string(数字)

#include<iostream>
#include<string>//头文件
using namespace std;
int main()
{
    int a=120215;
    string s=to_string(a);//括号里可以直接填数字,直接把数字转换成字符串,也可以是小数
    cout<<s;
    return 0;
}


<11>

<12>

<13>






全部评论

相关推荐

水墨不写bug:疑似没有上过大学
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务