C和C++的区别(6)字符串

目录

一,字符

二,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^Zb

2
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常用函数:

猜你喜欢

转载自blog.csdn.net/nameofcsdn/article/details/132225117