c
语言字符
在C语言中,字符用char表示:
char s;
scanf("%c",&s); cin >> s; s=getchar();不能写成getchar(s)
cin.get(s); s=cin.get();
cin.get();//用于吃掉回车,相当于getchar();
- isalnum()
如果参数是字母或数字,该函数返回true
if (isalnum(s)) <==> if(s>=’0’ && s<=’9’ || 小写 || 大写) - isalpha()
如果参数是字母,该函数返回true - isdigit()
如果参数是数字(0~9),该函数返回true - toupper();
- tolower();
C语言字符串函数
在C语言中,字符串用字符数组表示:
char s[100];
scanf("%s",s); cin >> s;
gets(s);
cin.get(s,100);
cin.getline(s,100) //比较两者区别
- strlen(字符数组)
功能:求字符串长度。
说明:该函数的实参可以是字符数组名,也可以是字符串常量。
注意:’\0’ 不占位置。
char s1[80] = “China”; cout << strlen(s1) << ‘\n’;//输出结果为5
cout << strlen(“大学生”)<< endl; //输出结果为6 - strcpy(字符数组1,字符数组2)
功能:将字符数组2中的字符串复制到字符数组1中
说明:该函数中的第二个参数也可以是一个字符串常量。
1)字符数组1的长度必须大于等于字符数组2的长度。即够用。
2)复制时连同字符串后面的’\0’一起复制到字符数组1中。即不用特别加’\0’。
3)字符数组的复制只能用strcpy函数处理,可以在定义的时候初始化。
注意:不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。
char a[20]=“aaaaaa”,
b[20]=“bbb”; //初始化
a=b; //不合法
a=“cccc”; //不合法
strcpy(a,b); //合法 - strncpy(字符数组1,字符数组2,len)
功能:将字符数组2前len个字符复制到字符数组1的前len个字符空间中。局部复制
说明:
1)第二个参数可以是数组名,也可以是字符串常量,第三个参数为正整数。
2)当字符数组2中表示的字符串的长度小于len时,则将该字符串全部复制到第一个参数所指定的数组中。
char s1[ 80] = “aaaaaa”, s2[80];
strncpy(s1,“student”, 4); //s1为"studaa"
strncpy(s2,“teacher”,10); //s2为"teacher" - strcat(字符数组1,字符数组2)
功能:将字符数组2中的字符串连接到字符数组1后面,并以’\0’结束。
说明:该函数中的第二个参数也可以是一个字符串常量。
注意:字符数组2中的内容没有影响。
char s1[20] = “one”, s2 = “two”, s3[20] = “three”; strcat(s1,s2); // s1为"onetwo"
strcat(s1,s3); // s1为"onetwothree" - strncat(字符数组1,字符数组2,len)
功能:将字符数2前len个字符连接到字符数组1后面。局部连接。
说明:
1)该函数中的第二个参数也可以是一个字符串常量。
2)当字符数组2中表示的字符串的长度小于len时,则将该字符串全部连接到第一个参数所指定的数组中。
char s1[ 80] =“aaaaaa”, s2[80] = “aaaaaa”;
strncat(s1,“student”, 4); //s1为"aaaaaastud"
strncat(s2,“teacher”,10); //s2为" aaaaaateacher"
例子:
> int main(){
> char str1[27],str2[]=“abcdefghijklmnopqrstuvwxyz”;
> int n;
> for(n=1;n<27;n++){
> str1[0]='\0';
> strncat(str1,str2,n);
> puts(str1);
> }
> return 0;
> }
- strcmp(字符数组1,字符数组2) 功能:比较两个字符串是否相等。
说明:
1)如果两个字符串中的字符均相同,则两个字符串相等,函数返回值为0;
2)当两个字符串不同时,则以自左至右出现的第一个不同字符的比较结果作为两个字符串的比较结果。如果第一个字符串大于第二个字符串,则返回值为1。如果第一个字符串小于第二个字符串,则返回值为-1。
3)这种比较是按字符的ASCII码值的大小比较的。
strcmp(“Student”,“Student”); //比较结果为0
strcmp(“student”,“Student”); //比较结果为1 - strncmp(字符数组1,字符数组2,len)
功能:比较两个字符数组中表示的字符串的前len个字符。
说明:
1)前两个参数均可以为字符数组或字符串,第3个参数为正整数。
2)若第一个字符串或第二个字符串的长度小于len时,该功能与strcmp()相同。
3)当两个字符串的长度均大于len时,len为最多要比较的字符个数。
strncmp(“English”,“England”,4) //两个字符串的前4个字符相同,返回0。
c++
语言字符串函数
在C++语言中,字符串用string表示:
string s;
cin >> s;
getline(cin,str); //注意两者的区别
- 字符串的构造函数(类似于java)
string s(str):生成字符串为str的复制品
string s(str, strbegin,strlen):将字符串str中从下标strbegin开始、长度为strlen的部分作为字符串初值
strings(str, len):将字符串str中的前len个字符串作为字符串s的初值
strings(num,c):生成num个c字符的字符串 string str1; //生成空字符串
string str2(“123456789”); //生成"1234456789"的复制品
string str3(“12345”, 0,3); //结果为"123"
string str4(“012345”, 5); //结果为"01234"
string str5(5,‘1’); //结果为"11111"
string str6(str2,2); //结果为"3456789" - 字符串的长度
size()和length():返回string对象的字符个数,他们执行效果相同。
string s=“hello world”; int i=s.length(); // i的值为11 - 字符串的连接
字符串的连接可以用“+”。
string s1=“hello “, s2=“world”; s1=s1+s2; // s1的值为"hello world”
s1=s1+‘a’;; // s1的值为"hello a”,不能连接数值型
与数值型连接参考:https://blog.csdn.net/qq_43298454/article/details/90813243 - 在字符串插入字符类型
在字符串中插入字符,可以用push_back()函数和insert()函数
string s1="hello “, s2=“world”;
1)push_back() s1. push_back(‘a’); // s1的值为"hello a”
2)insert() s1. insert (‘a’); // s1的值为"ahello " - 字符串的遍历
string s1(“abcdef”); // 调用一次构造函数
方法一: 下标法
> for( int i = 0; i < s1.length() ; i++ ){
> cout<<s1[i];
> } cout<<endl;`
方法二:正向迭代器
> string::iterator iter = s1.begin();
> for( ; iter < s1.end() ; iter++) {
> cout<<*iter;
> } cout<<endl;
方法三:反向迭代器
> string::reverse_iterator riter = s1.rbegin();
> for( ; riter < s1.rend()> ; riter++){
> cout<<*riter;
> } cout<<endl;
- 字符串的查找
find()返回值是字母在母串中的位置(下标记录),如果没有找到,那么会返回nops; rfind()从字符串末尾开始查找。
> string str = "hello world!";
> if(s.find("l")!=str.npos) cout << "found" << endl;
> else cout <<"not found" << endl;
> cout << str.find("l"); //返回2
> cout <<str.find("w", 6); //返回9
> cout << str.rfind("l"); //返回2
- 字符串的截取
注意跟Java的subString有区别。
substr有2种用法:
string s = “0123456789”;
string sub1 = s.substr(5); //从第5个位置开始一直到结尾:sub1 = “56789”
string sub2 = s.substr(5, 3); //从下标为5开始截取长度为3个位置:sub2 = “567” - 字符串的删除
erase() 删除从起始位置到终止位置的子串,也可以结合迭代器。
string str = “hello world!”; cout << str.erase(2); //返回he
cout << str.erase(2,8); //返回
hed str.clear(); //清除所有字符 - 字符串的替换(replace)
把字符串中指定位置上的字符串替换为新的字符串
string str = “hello world!”;
cout << str.replace(0,6,“HELLO”); //返回 HELLOworld
string substr=“hello”;
str.replace(str.find(substr),substr.length(),"?"); //返回 ? world - string的排序:sort(s.begin(),s.end())
string s = “cdefba”;
sort(s.begin(), s.end());
cout << s << endl; // 结果:abcdef