字符,字符串知识(c/c++)

字符与ASCII码:

ASCII码:

ASCII 全称为 ( American Standard Code for Information Interchange),简单的说,就是用 7 位二进制去编码我们生活中常见的数字,大小写字母,标点符号以及一些特殊的控制字符,如下:

  • 数字:0 , 1 , 2 , 3 ... 9

  • 字母:a , b , c ...z , A , B , C ... Z

  • 标点符号以及运算符:,. + - ...

  • 控制字符:回车,换行等控制字符

下面是部分ascii表截图:

字符:

相关知识:

字符型数据在计算机中存储的是字符的ASCII码(ASCII表参见上图)

字符又分为:

  • 控制字符或者通信专用字符 ( 0 ~ 31以及127)

  • 可显示字符 ( 32 ~ 126 )

每个常用字符都对应着一个-128~127的数字,二者之间可以互相转化:

常见ASCII值:

  • 'A'~'Z'的ASCII值为65-90

  • 'a'~'z'的ASCII值为97~122

  • '0'~'9'是48~57

字符可以参见运算,运算时会将其当作整数

例如下面代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    char c = 'a';
    cout<<(int)c<<endl;
    
   int a=78;
   cout<<(char)a<<endl;
   return 0;
}

输出结果:

97
N

c/c++常见的字符判断函数:

头文件:

#include<ctype.h>

详见参考:

c/c++字符判断函数总结

  1. isalnum函数

int isalnum(int ch);

检查给定字符是否为当前c语言环境下的字母数字字符,包括:

  • 数字 0123456789

  • 大写字母ABCDEFGHIJKLMNOPQRSTUVWXYZ

  • 小写字母abcdefghijklmnopqrstuvwxyz

  1. issalpha函数:

int isalpha(int ch);

检查给定字符是否为字母(包括大小写)

如果是,返回非零值,否则返回零值。

  1. islower(),isupper(),isdigit()

int islower(int ch);
int isupper(int ch);
例题:

题目链接:

https://www.dotcpp.com/oj/problem1035.html

题目描述

编写一函数,由实参传来一个字符串,统计此字符串中字母、数字、空格和其它字符的个数,在主函数中输入字符串以及输出上述结果。 只要结果,别输出什么提示信息。

详见:

ss

字符数组:

部分讲解:

字符串就是字符数组加上结束符’\0’。

可以使用字符串来初始化字符数组,但此时要注意,每个字符串结尾会暗含一个’\0’字符,因此字符数组的长度至少要比字符串的长度多1!

1.字符数组的输入与输出:

Char str[100];
Cin>>str;  //输入字符串时,遇到空格或回车就会停止
Cout<<str<<endl;  //输出字符串时,遇到空格或回车不会停止

2.读入一行字符串(包括空格):

char str[100];

Gets(str);

3. 字符串操作常用函数需要引入头文件:

#include <string.h>

  1. strlen(str),求字符串的长度

  1. strcmp(a,b),比较两个字符串的大小,a < b 返回-1,a == b 返回0,a > b返回1。这里的比较方式是字典序!

  1. strcpy(a,b),将字符串b复制给从a开始的字符数组。

详细请见:

字符串常用函数大全

例题:

760. 字符串长度 - AcWing题库

题目总结:

个人小结:

- 按整行读到string ,推荐用 方法2 getline(cin, string)

- 按整行读到char[] ,推荐用 方法4 cin.getline(cin, char*)

- 读单个字符串,推荐用 cin>>

啰嗦解释如下:

按行读

方法2 getline(cin, string) 和 方法4 cin.getline(cin, char*) 会读到回车为止,并且会把回车丢弃。

方法3 cin.get(cin, char*) 不丢弃回车

其他: fgets 会多读入一个回车,比较麻烦

读字符串

cin >> char* 会自动忽略起始的空格/回车/tab,结尾如果有回车空格,不会丢弃。 ” aa” => “aa”

scanf("%s", char*) 同上

cin >> string 同上

作者:Accepting

链接:https://www.acwing.com/solution/content/10357/

来源:AcWing

字符串(string):

string是可变长的字符序列,比字符数组更加好用。

使用时需要引入头文件:

#include<string>

定义和初始化:

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s1;//s1是空字符串
    string s2=s1;//s2==s1
    string s3="hello-world!";
    string s4(10,'a');s4->"aaaaaaaaaa"
    return 0;
}

输入和输出:

cin,cout

string s1;
cin>>s1;
cout<<s1<<endl;

注意:

利用printf()输出string

不能用printf直接输出string,需要写成:printf(“%s”, s.c_str());

string s="1234";
printf("%s",s.c_str());

getline()

使用getline()读取一整行

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string s;
    getline(cin,s);
    cout<<s<<endl;
}

empty(),size()

empty()和size()都可以通过string.x调用

empty()

empty函数根据string对象是否为空返回一个对应的布尔值。empty也是string的一个成员函数。只要之用点操作符知名是哪个对象执行了empty函数就可以了。

// 每次读入一整行,遇到空行直接跳过
while(getline(cin,line))
    if(!line.empty())
        cout<<line<<endl;
size()

size函数返回string对象的长度(即string对象中字符的个数),可以使用size函数只输出长度超过80个字符的行:

string line;
// 每次读入一整行,输出其中超过80个字符的行
while(getline(cin,line))
    if(line.size()>80)
        cout<<line<<endl;

string的比较

string支持以下所有比较操作(按字典序进行比较):

>  
<
>=
<=
==
!=

如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象。

如果两个string对象在某些对应位置上不一致,则string对象比较的结果其实是string对象中第一对相异字符比较的结果。

例子:

string str = “Hello”;
string phrase = “Hello World”;
string slang = “Hiya”;
//str小于phrase, slang大于str也大于phrase

为string对象赋值:

string st1(10, ‘c’), st2; // st1的内容是cccccccccc;st2是一个空字符串
st1 = st2; //赋值:用st2的副本替换st1的内容
//此时st1和st2都是空字符串

两个string对象相加:

string s1 = “hello,  ”, s2 = “world\n”;
string s3 = s1 + s2;                    // s3的内容是 hello, world\n
s1 += s2;                                // s1 = s1 + s2

字面值和string对象相加

标准库允许吧字符字面值和字符串字面值转换成string对象,所以在需要string对象的地方就可以使用这两种字面值来代替。

strings1=“hello”,s2=“world”;//在s1和s2中都没有标点符号
strings3=s1+“,”+s2+‘\n’;

当把string对象和字符字面值即字符串字面值混在一条语句中使用时,必须确保每个加法运算符(+)的两侧运算对象至少有一个是string:

strings4=s1+“,”;//正确: 把一个string对象和一个字面值相加
strings5=“hello”+“,”;//错误:两个运算符都不是string
strings6=s1+“,”+“world”;//正确
strings7=“hello”+“,”+s2;//错误:不能把字面值直接相加

注意:C++中的字符串字面值并不是标准库类型string的对象。切记,字符串字面值与string是不同的类型。

处理string对象中的字符:

  1. 当字符数组处理

  1. for

例子:

#include<iostream>
#include<string>

using namespace std;
int main()
{
    string s="nihao";
    for(char c: s)  cout<<c<<endl;
     for(char &c:s) c='a';
     cout<<s<<endl;
     return 0;
}

结果:

n
i
h
a
o
aaaaa

总结:

有错误的话,请大家指出来

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值