1、串(string)的定义:是由0个或多个字符组成的有限序列,一般叫字符串,记为s=”“(空串),s=”c1c2c3……cn”(长度为n的串)。串的特殊性在于结构中的每个元素都是一个字符.
2、串的存储区结构
串的存储结构和线性表一样,也分为两种:顺序存储和链式存储。
(1)串的顺序存储结构:一般保存在固定长度的数组中,数组下标从0开始,最后一位保存字符串结束标志“\0”。
(2)串的链式存储结构:一个结点元素存放一个字符,或者也可以存放多个字符(存放多个字符时,若最后一个结点为占满,可以用“#”或其他非串值字符补齐)。
3、标准库类型string
必须包含 string头文件 和using std::string;
①定义和初始化:string s; string s1="hello"; string s2("hello");
②输入一个字符串的方法:
cin>>(s); 遇到空格、制表符等就认为输入结束
getline(cin,s): 输入一整行,直到有换行才结束
简单的字符串操作如下:
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <string>
#include <cctype>
using namespace std;
using std::string;
int main()
{
/*1、用字符型数组存一个字符串*/
char str[1024];
gets(str);
cout<<str<<endl;
//2、用string表示字符串*/
string s;
//①使用cin输入字符串,遇到第一个空格就结束
cout<<"输入字符串为:";
cin>>s;
cout<<"使用cin的输出结果:"<<s<<endl;
//②使用getline(cin,s)函数输入字符串,输入一整行
cout<<"输入字符串为:";
getline(cin,s);
cout<<"使用getline的输出结果:"<<s<<endl;
/* 3、一个简单的密码交换代码:A->Z,B->Y……Z->A,小写相同变换,其他字符不变 */
cout<<"输入字符串为:";
getline(cin,s);
int len=s.size(); //size()统计字符串长度,包含空格等所有的字符,没有结束符\0
for (int i=0;i<len;i++)
{
if ('A'<= s[i] && s[i]<='Z')
{
s[i]='A'+'Z'-s[i];
}
else if ('a'<= s[i] && s[i]<='z')
{
s[i]='a'+'z'-s[i];
}
else
s[i]=s[i];
}
cout<<s<<endl;
getchar();
}
4、使用字符数组或字符指针处理字符串(C语言)
①定义和初始化:
char str[1024];
char str1[1024]={};
char str2[1024]={“hello world.”};
char* str=”hello world”;
②输入字符串的方法:
scanf(“%s”,&str); 遇到空格、制表符等就认为输入结束
gets()函数法: 输入一整行,直到有换行才结束
#include <stdio.h>
#include <iostream>
using namespace std;
#define N 100
int main()
{
char str1[N];
char str2[N];
cout<<"scanf输入字符串:";
scanf("%s",&str1); //若输入空格/制表符Tab/回车等,则认为输入结束
cout<<"scanf输出字符串:"<<str1<<endl;
cout<<"gets()函数输入字符串:";
gets(str2); //gets()函数:输入整个字符串,遇到换行结束
cout<<"gets()输出字符串:"<<str2<<endl;
}
int main()
{
/***** C语言中的字符串处理 ********/
//将字符串str2拷贝到字符串str1中
char str1[N];
char str2[N];
gets(str1);
gets(str2);
//字符串处理函数——获取长度:strlen()
int len1=strlen(str1); //获取字符串长度
int len2=strlen(str2);
cout<<"str1的长度为: "<<len1<<endl;
cout<<"str2的长度为: "<<len2<<endl;
//字符串处理函数——连接两个字符串:strcat()
strcat(str1,str2);
cout<<"str1+str2字符串连接为:"<<str1<<endl;
//字符串处理函数——比较:strcmp()
char s1[N],s2[N];
while(cin>>s1>>s2)
{
int ptr=strcmp(s1,s2);
if (ptr>0)
{
cout<<"str1 > str2"<<endl;
}
else if (ptr<0)
{
cout<<"str1 < str2"<<endl;
}
else
cout<<"str1 = str2"<<endl;
}
//字符串处理函数——将字符串转化为十进制int型数输出:atoi();atof();atod()
char s3[4]="123";
cout<<atoi(s3)<<endl;
//字符串处理函数——将int型数转换为字符串并存放在字符数组中:itoa();
int x=1234;
char s4[5];
cout<<itoa(x,s4,10)<<endl;
cout<<s4<<endl;
getchar();
}