数据结构——字符串(1)

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();

}

猜你喜欢

转载自blog.csdn.net/zhangying_496/article/details/81383891