C++字符串知识点小结
程序员文章站
2024-03-20 14:59:16
...
C++ 字符串
C++ 提供了一下两种类型的字符串表示形式:
- C风格字符串
- C++引入的string 类类型
C风格字符串
-
C 风格的字符串起源于 C 语言,并在 C++ 中继续得到支持。字符串实际上是使用 null 字符 ‘\0’ 终止的一维字符数组。因此,一个以 null 结尾的字符串,包含了组成字符串的字符。
-
下面的声明和初始化创建了一个 “Hello” 字符串。由于在数组的末尾存储了空字符,所以字符数组的大小比单词 “Hello” 的字符数多一个。
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
等价为:
char greeting[] = "Hello";
字符串的内存 表示:
其实,您不需要把 null 字符放在字符串常量的末尾。C++ 编译器会在初始化数组时,自动把 ‘\0’ 放在字符串的末尾。让我们尝试输出上面的字符串:
例如:
#include <iostream>
using namespace std;
int main ()
{
char greeting[6] = {'H', 'e', 'l', 'l', 'o', '\0'};
cout << "Greeting message: ";
cout << greeting << endl;
printf("%s",greeting); //输出同上句一样
return 0;
}
输出:
Greeting message: Hello
字符串的输入输出:
- scanf 输入 printf输出:
%c 用于单个字符,能识别空格与换行,
%s 用于字符数组,通过空格,换行来判定字符串的结束
#include<stdio.h>
int main()
{
char s[10];
scanf("%s",str);
printf("%s",str);
return 0;
}
输入:TAT TAT TAT
输出:TAT
- getchar 与 putchar
#include <stdio.h>
int main(){
char c1, c2, c3;
c1 = getchar();
c2 = getchar();
c3 = getchar();
putchar(c1);
putchar(c2);
putchar(c3);
return 0;
}
输入:
a b c
输出:
a b
因为 c2 存储的是换行符,因此字符 c 没有存入。
所以应该这样写:
#include <stdio.h>
int main(){
char c1, c2, c3;
c1 = getchar();
getchar();
c2 = getchar();
getchar();
c3 = getchar();
putchar(c1);
putchar(c2);
putchar(c3);
return 0;
}
输入:
a b c
输出:
a b c
- gets 与 puts:
gets 用来输入一行字符串(注意:gets 识别换行符 \n 作为输入结束,gets可以识别空格并将其保存到字符串中,因此 scanf 完一个整数后,如果要使用 gets,需要先用 getchar 接收一个整数后的换行符),并将其存放于数组中;puts 用来输出一行字符串,并紧跟一个换行.
#include<stdio.h>
int main()
{
char str1[20];
char str2[5][10];
gets(str1);
for(int i = 0; i < 3; i++)
gets(str2[i]);
puts(str1);
for(int i = 0; i < 3; i++)
puts(str2[i]);
return 0;
}
输入:abcd //以换行区分字符的结束
cdef
efgh
ghijk
输出:与输入一样
当然 C++ 中提供一些函数用于字符串的处理
#include <iostream>
#include <cstring>
using namespace std;
int main ()
{
char str1[11] = "Hello";
char str2[11] = "World";
char str3[11];
int len ;
// 复制 str1 到 str3
strcpy( str3, str1);
cout << "strcpy( str3, str1) : " << str3 << endl;
// 连接 str1 和 str2
strcat( str1, str2);
cout << "strcat( str1, str2): " << str1 << endl;
// 连接后,str1 的总长度
len = strlen(str1);
cout << "strlen(str1) : " << len << endl;
return 0;
}
输出:
strcpy( str3, str1) : Hello
strcat( str1, str2): HelloWorld
strlen(str1) : 10
C++ 中的String类
用法:
#include <iostream>
#include <string>
using namespace std;
int main ()
{
string str1 = "Hello";
string str2 = "World";
string str3;
int len ;
// 复制 str1 到 str3
str3 = str1;
cout << "str3 : " << str3 << endl;
// 连接 str1 和 str2
str3 = str1 + str2;
cout << "str1 + str2 : " << str3 << endl;
// 连接后,str3 的总长度
len = str3.size();
cout << "str3.size() : " << len << endl;
return 0;
}
字符串数组
string name[5]; //定义一个字符串数组,它包含5个字符串元素
string name[5]={″Zhang″,″Li″,″Fun″,″Wang″,″Tan″};
当然string类也提供了一系列对字符串的操作
- append() – 在字符串的末尾添加字符
- find() – 在字符串中查找字符串
- insert() – 插入字符
- length() – 返回字符串的长度
- replace() – 替换字符串
- substr() – 返回某个子字符串
- size() – 返回字符串的长度
比如:
#include <iostream>
#include <string>
using namespace std;
int main()
{
//定义一个string类对象
string http = "www.runoob.com";
//打印字符串长度
cout<<http.length()<<endl;
//拼接
http.append("/C++");
cout<<http<<endl; //打印结果为:www.runoob.com/C++
//删除
int pos = http.find("/C++"); //查找"C++"在字符串中的位置
cout<<pos<<endl;
http.replace(pos, 4, ""); //从位置pos开始,之后的4个字符替换为空,即删除
cout<<http<<endl;
//找子串runoob
int first = http.find_first_of("."); //从头开始寻找字符'.'的位置
int last = http.find_last_of("."); //从尾开始寻找字符'.'的位置
cout<<http.substr(first+1, last-first-1)<<endl; //提取"runoob"子串并打印
return 0;
}
上一篇: 2019面试问题总结
下一篇: vue的学习与总结