C++字符串数组

article/2025/10/31 12:15:58

(转载文章)
C++提供了一种新的数据类型——字符串类型(string类型),在使用方法上,它和char、int类型一样,可以用来定义变量,这就是字符串变量——用一个名字代表一个字符序列。

实际上,string并不是C++语言本身具有的基本类型,它是在C++标准库中声明的一个字符串类,用这种类可以定义对象。每一个字符串变量都是string类的一个对象。

一、字符串变量的定义和引用

1. 定义字符串变量
和其他类型变量一样,字符串变量必须先定义后使用,定义字符串变量要用类名string。如
string string1; //定义string1为字符串变量
string string2=″China″; //定义string2同时对其初始化
应当注意: 要使用string类的功能时,必须在本文件的开头将C++标准库中的string头文件包含进来,即应加上
#include <string> //注意头文件名不是string.h

2. 对字符串变量的赋值
在定义了字符串变量后,可以用赋值语句对它赋予一个字符串常量,如
string1=″Canada″;
既可以用字符串常量给字符串变量赋值,也可以用一个字符串变量给另一个字符串变量赋值。如
string2=string1; //假设string2和string1均已定义为字符串变量
不要求string2和string1长度相同,假如string2原来是″China″,string1原来是″Canada″,赋值后string2也变成″Canada″。在定义字符串变量时不需指定长度,长度随其中的字符串长度而改变。

可以对字符串变量中某一字符进行操作,如
string word=″Then″; //定义并初始化字符串变量word
word[2]=′a′; //修改序号为2的字符,修改后word的值为″Than″

3. 字符串变量的输入输出
可以在输入输出语句中用字符串变量名,输入输出字符串,如
cin>> string1; //从键盘输入一个字符串给字符串变量string1
cout<< string2; //将字符串string2输出

 

二、字符串变量的运算

在上一节中可以看到: 在以字符数组存放字符串时,字符串的运算要用字符串函数,如strcat(连接)、strcmp(比较)、strcpy(复制),而对string类对象,可以不用这些函数,而直接用简单的运算符。

 

  1. 字符串复制用赋值号
    string1=string2;
    其作用与“strcpy(string1,string2);”相同。
  2. 字符串连接用加号
    string string1=″C++″; //定义string1并赋初值
    string string2=″Language″;//定义string2并赋初值
    string1=string1 + string2;//连接string1和string2
    连接后string1为″C++ Language″。
  3. 字符串比较直接用关系运算符
    可以直接用 ==(等于)、>(大于)、<(小于)、!=(不等于)、>=(大于或等于)、<=(小于或等于)等关系运算符来进行字符串的比较。
    使用这些运算符比使用5.5.5节中介绍的字符串函数直观而方便。

 

三、字符串数组

不仅可以用string定义字符串变量,也可以用string定义字符串数组。如
string name[5]; //定义一个字符串数组,它包含5个字符串元素
string name[5]={″Zhang″,″Li″,″Fun″,″Wang″,″Tan″};
//定义一个字符串数组并初始化
此时name数组的状况如图5.11所示。

 


图5.11


关于字符串数组的几点说明:

  1. 在一个字符串数组中包含若干个(现为5个)元素,每个元素相当于一个字符串变量。
  2. 并不要求每个字符串元素具有相同的长度,即使对同一个元素而言,它的长度也是可以变化的,当向某一个元素重新赋值,其长度就可能发生变化。
  3. 在字符串数组的每一个元素中存放一个字符串,而不是一个字符,这是字符串数组与字符数组的区别。如果用字符数组存放字符串,一个元素只能存放一个字符,用一个一维字符数组存放一个字符串。
  4. 每一个字符串元素中只包含字符串本身的字符而不包括′\0′。


可见用字符串数组存放字符串以及对字符串进行处理是很方便的。

 

记一次自己的坑:

     vector<string> AllFileName;//记录目录下所有文件的名称for (int i = 0; i < AllFileName.size(); i++){for (int j = 0; j < AllFileName[i].length(); j++){cout << AllFileName[i][j];}cout << endl;}

 

 

 

在定义字符串数组时怎样给数组分配存储空间呢?实际上,编译系统为每一个字符串变量分配4个字节,在这个存储单元中,并不是直接存放字符串本身,而是存放字符串的地址。在本例中,就是把字符串″Zhang″的地址存放在name[0],把字符串″Li″ 的地址存放在name[1],把字符串″Fun″的地址存放在name[2]……图5.11只是一个示意图。在字符串变量中存放的是字符串的指针(字符串的地址)。

 

一、字符串连接函数 strcat

其函数原型为
strcat(char[],const char[]);
strcat是string catenate(字符串连接)的缩写。该函数有两个字符数组的参数,函数的作用是:将第二个字符数组中的字符串连接到前面字符数组的字符串的后面。第二个字符数组被指定为const,以保证该数组中的内容不会在函数调用期间修改。连接后的字符串放在第一个字符数组中,函数调用后得到的函数值,就是第一个字符数组的地址。例如
char str1[30]=″People′s Republic of ″;
char str2[]=″China″;
cout<<strcat(str1,str2));//调用strcat函数
输出:
People′s Republic of China
连接前后的状况如图5.10所示。


图5.10

二、字符串复制函数strcpy

其函数原型为
strcpy(char[],const char[]);
strcpy是string copy(字符串复制)的缩写。它的作用是将第二个字符数组中的字符串复制到第一个字符数组中去,将第一个字符数组中的相应字符覆盖。例如
char str1[10],str2[]=″China″;
strcpy(str1,str2);
执行后,str2中的5个字符″China″和′\0′(共6个字符)复制到数组str1中。

关于字符串复制函数strcpy的几点说明:

  1. 在调用strcpy函数时,第一个参数必须是数组名(如str1),第二个参数可以是字符数组名,也可以是一个字符串常量。
  2. 可以用strcpy函数将一个字符串中前若干个字符复制到字符数组中去。
  3. 只能通过调用strcpy函数来实现将一个字符串赋给一个字符数组,而不能用赋值语句将一个字符串常量或字符数组直接赋给一个字符数组。

 

三、字符串比较函数strcmp

其函数原型为
strcmp(const char[],const char[]);
strcmp是string compare(字符串比较)的缩写。作用是比较两个字符串。由于这两个字符数组只参加比较而不应改变其内容,因此两个参数都加上const声明。以下写法是合法的:
strcmp(str1,str2);
strcmp(″China″,″Korea″);
strcmp(str1,″Beijing″);

比较的结果由函数值带回:

 

  1. 如果字符串1=字符串2,函数值为0。
  2. 如果字符串1>字符串2,函数值为一正整数。
  3. 如果字符串1<字符串2,函数值为一负整数。


字符串比较的规则与其他语言中的规则相同,即对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到′\0′为止。如全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。

注意:对两个字符串比较,不能用以下形式:
if(str1>str2) cout<<″yes″;
字符数组名str1和str2代表数组地址,上面写法表示将两个数组地址进行比较,而不是对数组中的字符串进行比较。对两个字符串比较应该用
if(strcmp(str1,str2)>0) cout<<″yes″;

 

四、字符串长度函数strlen

函数原型为
strlen(const char[]);
strlen是string length(字符串长度)的缩写。它是测试字符串长度的函数。其函数的值为字符串中的实际长度,不包括′\0′在内。如
char str[10]=″China″;
cout<<strlen(str);
输出结果不是10,也不是6,而是5。

以上是几种常用的字符串处理函数,除此之外还有其他一些函数


http://chatgpt.dhexx.cn/article/65YvYrro.shtml

相关文章

【C语言】动态分配二维字符串数组

动态分配一个二维字符串数组 &#xff08;1&#xff09; 分配可能不连续的内存 申请 char**pps8Output (char **) malloc(n * sizeof(char *)); 对于pps8Output而言&#xff0c;它获得了一块动态分配的连续内存&#xff0c;这块连续的内存可以放n个char *指针。 下面为每一…

字符串数组的三种形式

一、字符串数组 1.0 字符串数组的两种形式 第一种形式&#xff1a;二维字符数组 char arry[7][10] {"Monday","Tuesday","Wednsday","Thurday","Friday","Saturday","Sunday"};在栈上分配了70字节内…

干货丨什么是字符串数组

一、概念理解 1.C语言中没有字符串类型&#xff0c;用一片内存空间保存一串字符&#xff0c;这片空间称作字符数组。 2.以‘\0’结尾的字符数组被称为字符串数组。‘\0’是字符串结束的标志。 3.用双引号括起来的都是字符串。 二、初始化 char str[6] {h,e,l,l,o,\0};//字…

c语言之字符串数组

还是在写图的存储结构的时候&#xff0c;遇到了问题&#xff0c;就是如何在一个数组中存放字符串&#xff0c;我相信这个问题 对于面向对象的编程语言来说&#xff0c;轻而易举&#xff0c;比如对于Java来说,直接像下面就可以了&#xff1a; 但是c语言没有String这个类型&…

Android 自定义弹窗提示(AlertDialog)

Android 自定义弹窗提示 Java文件&#xff1a; private void showDialog() {AlertDialog.Builder builder new AlertDialog.Builder(this);//获取界面View view LayoutInflater.from(this).inflate(R.layout.alert_dialog, null);//将界面填充到AlertDiaLog容器并去除边框bui…

AlertDialog对话框详例

Android—3分钟你也能学会AlertDialog对话框 在Android开发中&#xff0c;少不了AlertDialog对话框的使用&#xff0c;也是至关重要的一个功能。AlertDialog的构造方法被声明为protected&#xff0c;所以我们不能使用new来创建AlertDialog对象。 目录 Android—3分钟你也能学…

Android - AlertDialog 对话框

Android - AlertDialog 对话框 使用步骤&#xff1a; ①创建一个AlertDialog.Builder对象②设置标题 内容 正面负面按键 编写点击事件③调用.show() 显示AlertDialog XML部分&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLay…

AlertDialog替代ProgressDialog方案

在Android API level 26及以后版本中&#xff0c;ProgressDialog被弃用&#xff0c;使用以下方法可以替代ProgressDialog。 首先&#xff0c;使用AlertDialog新建一个对象作为容器&#xff0c;在这里我们首先设置对话标题&#xff0c;然后取消然后关闭返回键退出对话框&#x…

改变AlertDialog默认背景

安卓4.0自带的AlertDialog太丑了有木有&#xff1f;黑色的背景很难看&#xff0c;今天实现的是怎么自定义style实现改变AlertDialog背景 首先在values/styles.xml文件中增加如下style <style name"AlertDialog" parent"android:Theme.DeviceDefault.Light.…

Android App开发超实用实例 | AlertDialog对话框

介绍AlertDialog对话框从简到繁的多种设计方案,从新角度理解UI交互设计。 AlertDialog对话框允许自定义弹出对话框的内容,实现比之前讲解的几种对话框更丰富的功能。 01、带默认按钮的AlertDialog 程序单击按钮后执行第17行代码,调用自定义方法showAlertDialog()。 第22~6…

Android中AlertDialog的使用

Android中AlertDialog的使用 简述默认样式单选弹出框多选弹出框列表对话框自定义弹出框完整代码 简述 AlertDialog可以在当前的界面上显示一个对话框&#xff0c;这个对话框是置顶于所有界面元素之上的&#xff0c;能够屏蔽掉其他控件的交互能力&#xff0c;因此AlertDialog一般…

android-如何关闭AlertDialog.Builder对话框

android-如何关闭AlertDialog.Builder对话框 前言 在实际写代码的时候&#xff0c;AlertDialog.Builder的使用算是比较频繁的&#xff0c;在对AlertDialog.Builder关闭的时候&#xff0c;我们会发现&#xff0c;AlertDialog.Builder对话框没有相对应的finish()或者dismiss()这…

Android 自定义AlertDialog

Android 自定义popuWindow 对于项目需求中&#xff0c;系统的弹出框不能满足我们的需求&#xff0c;就只能通过自定义布局来实现自己相对应的功能&#xff0c;这里总结一篇关于AlertDialog的 具体操作 这里把弹出框封装了一个方法&#xff0c;使用的时候&#xff0c;只需要在…

Android进阶之AlertDialog自定义

AlertDialog的自定义方式有很多种&#xff0c;这里介绍两种。 第一种是比较简单的&#xff0c;只自定义内容。 在AlertDialog使用详解中&#xff0c;非常详细的介绍了以下六种使用方法。 一、简单的AlertDialog&#xff08;只显示一段简单的信息&#xff0c;比如about us&…

Android入门第九篇之AlertDialog

本文来自http://blog.csdn.net/hellogv/ &#xff0c;引用必须注明出处&#xff01; 时隔一年&#xff0c;又要准备做Android的开发了&#xff0c;最近复习和整理一下Android的知识。这次要说的是AlertDialog&#xff0c;这种对话框会经常遇到。AlertDialog跟WIN32开发中的Dial…

对话框AlertDialog的基本使用(新手)

AlertDialog是点击某一组件时&#xff0c;本文用按钮举例&#xff0c;弹出一个对话框&#xff0c;供你选择接下来的操作。 基础用法 首先要给按钮设置点击事件&#xff0c;然后再onClick里构建 AlertDialog.Builder 方法 代码如下&#xff1a; findViewById(R.id.btn).setOn…

Android的 AlertDialog自定义布局与常用布局用法(弹窗)

1.直接上效果图&#xff0c;看看是不是你们想要的效果图 2.主活动MainActivity2的代码如下 import androidx.appcompat.app.AppCompatActivity; import android.annotation.SuppressLint; import android.app.Activity; import android.app.AlertDialog; import android.app…

AlertDialog详解

对话框介绍与示例 对话框在程序中不是必备的&#xff0c;但是用好对话框能对我们编写的应用增色不少。采用对话框可以大大增加应用的友好性。比较常用的背景是&#xff1a;用户登陆、网络正在下载、下载成功或者失败的提示&#xff0c;还有&#xff0c;比如&#xff1a;短信来了…

Android的AlertDialog详解

转自&#xff1a;http://www.2cto.com/kf/201205/131876.html 参考文章&#xff1a;http://www.cnblogs.com/jiezzy/archive/2012/09/20/2694917.html http://blog.csdn.net/lizzy115/article/details/6924416 AlertDialog的构造方法全部是Protected的&#xff0c;所以不能直接…

AndroidStudio中AlertDialog的四种用法

目录 1.默认样式 2.单选弹出框 3.多选弹出框 4.自定义弹出框 补充&#xff01;&#xff01; 1.默认样式 android.support.v7.app.AlertDialog.Builder builder new android.support.v7.app.AlertDialog.Builder(AlertDialogActivity.this); builder.setTitle("请回…