C-串

在C++中,有两种字符串,一种是从C沿袭过来的,称为C—字符串,简称C—串;另一种是string。

C—串为用双引号括起来的,以一个全0位(整数0)字节作为结束符的字符序列。

C—串的空间长度为字符串长度加1

C—串的类型为char*(const char*)(字符指针),表示C—串的起始地址

(输出字符指针就是输出C—串,所以输出时从起始地址开始,直到遇到0为止)

#include<iostream>

using namespace std;
int main()
{
	char* str1="Hello!";
	char str2[7]="Hello!";
	char str3[7]={'H','e','l','l','o','!','\0'};
	int a[5]={0,1,2,3,4};
	cout<<str1<<endl<<str2<<endl<<str3<<endl; //都为 Hello!
	cout<<*str1<<*str2<<*str3<<endl; //都为 H
	cout<<&str1<<" "<<a<<endl; //0012FF5C  0012FF20
	return 0;
}

C-串库函数:

strcpy(string copy)

函数声明:

char* strcpy(char* x1,char* x2)

函数说明:

用x2的内容覆盖x1。由于x2字串的长度可能比x1字串空间要长,所以strcpy的使用并不安全。

 

strcmp(string compare)

函数声明:

int strcmp(char* x1,char* x2)

函数说明:

该函数表示将x1串与x2串进行字典序比较。如果x1小,则返回值为负数;如果x1大,则返回非0正数;如果两者相等,则返回0。

 

strcat(string concat)

函数声明:

char* strcat(char* x1,char* x2)

函数说明:

该函数将x2字串的内容接在x1字串之后,或者说将x2字串拷贝到x1字串结束处。显然,该调用会引起x1字串加长,或者说,结束符0的位置移后。在x1字串之后所余自身空间不足以接纳x2字串时,调用操作将不安全。

 

strrev(string reverse)

函数声明:

char* strrev(char* x)

函数说明:

该函数将x字串倒过来,并改变原来的存储,同时直接将结果字串返回。

 

strset(string set)

函数声明:

char* strset(char* x,char b)

函数说明:

该函数是将x整个字串的每个字符都用b字符来取代,并将x作为结果返回。

 

strstr(string substring)

函数声明:

int strstr(char* x,char* s)

函数说明:

该函数是在x字串中查找s字串。若找到,则返回整数1,否则返回整数0。

 

strchr(string char)

函数声明:

int strchr(char* x,char b)

函数说明:

该函数在x字串中查找b字符。若找到,则返回整数1,否则返回整数0。

#include<iostream>

using namespace std;
int main()
{
	char* s1="ABC";
	char* s2="DEF";
	char a[10];
	strcpy(a,s1);  //复制
	cout<<(strcmp(a,s1)==0?"":"not ")<<"equal"<<endl;  //比较
	cout<<strcat(a,s2)<<endl;  //连接
	cout<<strrev(a)<<endl;  //倒置
	cout<<strset(a,'c')<<endl;  //设置
	cout<<(strstr(s1,"BC")?"":"not ")<<"found"<<endl;  //查找字串
	cout<<(strchr(s1,'c')?"":"not ")<<"found"<<endl;  //查找字符
	return 0;
}
//运行结果:
//equal
//ABCDEF
//FEDCBA
//cccccc
//found
//not found


C-串的输入输出:

#include<iostream>

using namespace std;
int main()
{
	for(char a[20];cin>>a;) //输入 AB CD EF
		cout<<a<<endl;
	return 0;
}
//运行结果:
//AB
//CD
//EF

        cin>>的读入方式总是将前导的空格(所谓空格,即包括空格、回车、水平或垂直制表符等)滤掉,将单词读入,当遇到空格时结束本次输入。

//也可以通过getline将其一次性地输入:
#include<iostream>

using namespace std;
int main()
{
	char a[20];
	cin.getline(a,20); //输入 AB CD EF
	cout<<a<<endl;
	return 0;
}
//运行结果:
//AB CD EF
//也可以通过getline将其一次性地输入:
#include<iostream>
#include<string>

using namespace std;
int main()
{
	string str;
	getline(cin,str); //输入 AB CD EF
	cout<<str<<endl;
	return 0;
}
//运行结果:
//AB CD EF

       getline总是将行末的回车符滤掉。

//逐个字符读入:
for(char c;(c=cin.get())!='\n';)
	cout<<c;
cout<<endl;


//string流
//计算文件a.txt中每行所有整数之和
#include<iostream>
#include<string>
#include<sstream> 
#include<fstream>

using namespace std;
int main()
{
	ifstream fin("a.txt");
	for(string str;getline(fin,str);)
	{
		int temp=0,sum=0;
		for(istringstream sin(str);sin>>temp;) 
			sum+=temp;
		cout<<sum<<endl;
	}
}
        istringstream是输入string流,在sstream资源中说明。
        其创建sin流(名字可任意取)时,参数为string对象。

        其将string的实体看作是一个输入流,因而,sin>>temp即是从string流中输入整数到temp中。


char*类型和string类型之间的转换:

一、char*类型转换为string类型:

char* c="abcd";

string str=c;

或者

char c[]="abcd";

string str=c;

 

二、string类型转换为char*类型:

string str="abcd";

const char* c=str.c_str();  //c_str()是把string转换成const char*

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值