欢迎使用本站,预祝练习时长两年半的选手们到成功! [本模块信息来自tem/def/head]

dxw 数组5

时间:2024-05-11 15:13 作者:admin 点击:
# 字符数组 char a[150]; 字符数组的功能,与普通数组完全相同。 以下都是字符数组可用的: ## 字符数组的输入输出 另外,字符数组拥有字符串的特性,可以用类似字符串的语法 cina;//整

# 字符数组

char a[150];

字符数组的功能,与普通数组完全相同。

以下都是字符数组可用的:

## 字符数组的输入输出

另外,字符数组拥有字符串的特性,可以用类似字符串的语法

cin>>a;//整体输入 abcd 只能在无空格时使用

cin.getline(a,150);//整行输入 连带空格都能存


cout<<a;//整体输出

## 字符数组的功能

使用时,确保字符数组中,存在'\0',以保证函数运行正常

### 1、字符数组的有效长度

strlen(a);//string length

从字符数组的第一个元素开始计数,直到遇到空字符('\0',0)停止,返回计数,即长度

char c[5]={'1','2','3','4','5'};

cout<<strlen(c);//不确定

char c[5]={'1','2','3'};

cout<<strlen(c);//3

### 2、字符数组的比较

strcmp(c1,c2);//string compare

从两个数组的第一个元素开始比较,比较ascii值的大小,直到遇到空字符('\0',0),返回数字

返回0 一样大

返回正数 c1大

返回负数 c2大

char c1[3]={'1','2','3'};

char c2[3]={'1','2','3'};

cout<<strcmp(c1,c2);//不确定

## 字符串,默认跟随不占空间的'\0'

char a[100];

cin>>a;和cin.getline(a,100);都是以字符串形式赋值,此时会自带'\0'


## 以字符串对字符数组进行初始化

char a[5]={"abcd"};//存:'a' 'b' 'c' 'd' '\0'

char a[5]={"abcde"};//报错

char a[5]="abcd";//可以省略大括号


# 基础题

输入一句话(英文),对其变形输出

i love china

I Love China

I lovE chinA

# 进阶题

输入一句话(英文),分别变形处理

i love china

i evol anihc


# 字符串 string 类型

字符串创建后,在内存中,存放的位置,与基本数据类型不同

输出字符串占用的空间大小,输出的不唯一

cout<<sizeof(s);//使用电脑进行输出,考试以电脑输出为准


学习字符串:是一个单独的结构,不是数组

字符串拥有与字符数组相同的功能,可以使用下标

string s;

cin>>s;

cout<<s;

//使用下标输出时

for(int i=0;i<s.size();i++){

   cout<<s[i];//s[i]代表的是字符串中,当前位置的字符

}

getline(cin,s);//字符串的有空格的输入

# 字符串的函数

## size

s.size();//计算字符串中字符的数量

## length

s.length();//与s.size()没有区别

## resize

s.resize();//重置长度

> string s="abc";

> s.resize(2);

> cout<<s;//ab

## compare

s.compare(s2);//比较,返回下标,正s大,负s2大,0一样大

string支持使用关系运算符 > < >= <= == !=

string s="98";

string s2="123";

if(s>s2) cout<<s;

else cout<<s2;

此时,s大,字符串比较大小,是根据ascii值比较

如果想比较字符串中代表的数据大小,怎么操作:

类型转换

int a=0;

int b=0;

for(int i=0;i<s.size();i++){

   a=a*10+s[i]-'0';

}

for(int i=0;i<s2.size();i++){

   b=b*10+s2[i]-'0';

}

if(a>b) cout<<s;

else cout<<s2;

判断长度

if(s.size()>s2.size() || s.size()==s2.size()&&s>s2){

   cout<<s;

}

else cout<<s2;

利用类型转换函数

## stoi

int a=stoi(s);

int b=stoi(s2);

if(a>b) cout<<s;

else cout<<s2;

## to_string

int a=56789;

string s=to_string(a);//"56789"


## substr

字符串截取

string s="123456789";

       //012345678

cout<<s.substr(5);//从下标5开始,截取到最后 "6789"

cout<<s.substr(3,4);//从下标3开始,截取长度为4 "4567"

//从头开始 保留5位长度

cout<<s.substr(0,5);

substr 不改变原来的字符串

s.resize(5);

resize 改变原来的字符串


## find

查找某个字符或某个字符串,在当前字符串中的位置

输入:

abcdefg

c

def

输出

2

3

string s;

string ss;

cin>>s;

cin>>ss;

cout<<s.find(ss);//从s中查找ss出现的位置

找到了,返回ss第一个字母的下标

没找到,返回unsigned long long 的最大值

string s="a";

string s2="b";

cout<<s.find(s2);


//判断一个字符串中是否包含xxx

if(s.find(xxx)<s.size()){

   包含

}


# 【cin.getline 和 getline】 与cin混用错误

int a;

string s;

cin>>a;

cin.ignore();//清空黑框缓冲垃圾

getline(s); //cin.getline(c,100);



# 去除多余空格

## 方案一

string s;

getline(cin,s);

for(int i=0;i<s.size();i++){

   if(s[i]!=' ') cout<<s[i];

   else{

       int c=0;

       for(int j=i;j<s.size();j++){

           if(s[j]==' ') c++;

           else break;

       }

       cout<<' ';

       i+=c-1;

   }

}

## 方案二

string s;

getline(cin,s);

for(int i=0;i<s.size();i++){

   if(s[i]==' '&&s[i-1]==' ') continue;

   else cout<<s[i];

}

## 方案三

string s;

while(cin>>s){

   cout<<s<<" ";

}









(责任编辑:admin)
    顶一下
    (0)
    0%
    踩一下
    (0)
    0%