目录
一,字符
二,C语言字符串
1,字符串的表示
2,输入输出
3,常用函数
三,string类
1,定义,初始化,输入输出
一,字符
类型:char
输入:getchar
输出:putchar
示例:
#include <stdio.h>void main()
{char ch;while (ch = getchar()){if (ch == EOF)break;printf("%d", ch);putchar(ch);}return;
}
运行结果:(8行)
a^Zb
97a
26
a
97a
10^Z
解释:
输入a^Zb并回车,输入了2个字符a和^Z,再输入a并回车,输入了2个字符a和换行符,再输入^Z程序结束
注1:
'\0'的ASCII码是0,‘^A’ - '^Z' 的ASCII码是1-26,其中换行符'\n'的是10,'^Z'的是26,但是当输入缓冲区为空时'^Z'出现在'\n'之后时,'^Z'的ASCII码是-1,表示文件结尾end of file
注2:
EOF是常量-1,OJ输入输出经常用EOF来控制。
注3:
10号'\n'和26号'^Z'都是getchar的截断,输入一行字符串,getchar只能读取到第一个'\n'或'^Z',后面如果还有就丢弃
二,C语言字符串
1,字符串的表示
c语言中,字符串用char数组表示,字符串末尾加上'\0'表示结束
2,输入输出
输入:gets
输出:puts
示例:
#include <stdio.h>
#include<string.h>void main()
{char str[]="abcde";puts(str);gets(str);printf("%d\n", strlen(str));puts(str);return;
}
运行结果1:(4行)
abcde
^Za
5
abcde
运行结果2:(5行)
abcde
a^Zb2
a?
可以看出,换行符和^Z都是gets函数的截断,区别在于
换行符会被gets读取并丢弃,而gets对^Z的处理和getchar一样,缓冲区为空时就是-1号字符,缓冲区不为空时就是26号字符
3,常用函数
(1)strcat函数——字符串连接
string catenate字符串连接
示例:
#include <stdio.h>
#include<string.h>void main()
{char str1[10] = "ab";char str2[] = "cd";printf("%d %d\n", strlen(str1), strlen(str2));strcat(str1, str2);printf("%d %d\n", strlen(str1), strlen(str2));printf("%s %s", str1, str2);return;
}
运行结果:
2 2
4 2
abcd cd
strcat(str1, str2)函数就是把str2复制到str1后面
(2)strcpy和strncpy函数——字符串复制
strcpy(str1,str2)把str2复制到str1的位置
strncpy(str1,str2,n)把str2的前n个字符复制到str1的位置
(3)strcmp函数——字符串比较
strcmp(str1,str2)是按照字典序比较,返回值>0,=0,<0分别表示str1>str2,str1==str2,str1<str2
(4)strlen和sizeof——字符串长度
sizeof是关键字,计算的是数组长度
strlen是函数,计算的是字符串中字符数目,不包括'\0'
(5)strlwr和strupr函数——字符串大小写
strlwr是把大写字母换成小写字母
strupr是把小写字母换成大写字母
总结:C-风格字符串输入——cin或者getline或者get,cin是以空格或换行结束,getline和get都是读取一行。
getline函数会读取并丢弃换行符,而get函数如果带参会保留换行符在输入缓冲区,get函数如果不带参可以读取并丢弃换行符。
三,string类
1,定义,初始化,输入输出
#include<iostream>
#include<string>
using namespace std;int main()
{string str="abc";cin>>str;cout<<str;return 0;
}
2,string的赋值、计算长度、翻转
#include<iostream>
#include<string>
using namespace std;int main()
{string str1="abc";string str2=str1;reverse(str2.begin(),str2.end());cout<<str1<<" "<<str1.length()<<" "<<str2;return 0;
}
3,从string中取字符
可以用数组形式,也可以用迭代器形式
#include<iostream>
#include<string>
using namespace std;int main()
{string str="abcde";cout<<str[2]; string::iterator it=str.begin();cout<<*it;it=str.end()-1;cout<<*it;return 0;
}
输出:
cae
4,string的比较、连接
#include<iostream>
#include<string>
using namespace std;int main()
{string str1="abc",str2="def",str3="def";if(str1<str2)cout<<"str1<str2\n";if(str2==str3)cout<<"str2=str3\n";cout<<str1+str2;return 0;
}
输出:
str1<str2
str2=str3
abcdef
5,string转字符数组
#include<iostream>
#include<string>
using namespace std;int main()
{string str="abc";const char *p1=str.c_str();char *p2=new char[20];strcpy(p2,p1);cout<<p2;return 0;
}
6,string中查找字符
#include<iostream>
#include<string>
using namespace std;int main()
{string str="abca";cout<<str.find('a')<<" "<<str.find('a',2);return 0;
}
输出:
0 3
附上c++课本上的string常用函数: