字符串数组

字符数组
  字符数组是指元素为字符的数组。字符数组是用来存放字符序列或字符串的。字符数组也有一维、二维和三维之分。

字符数组的定义格式
  字符数组定义格式同于一般数组,所不同的是数组类型是字符型,第一个元素同样是从ch1[0]开始,而不是ch1[1]。具体格式如下:
       [存储类型] char 数组名[常量表达式1]…
  例如:
    char ch1[5];                //数组ch1是一个具有5个字符元素的一维字符数组
         char ch2[3][5];            //数组ch2是一个具有15个字符元素的二维字符数组

字符数组的赋值
  字符数组赋值类似于一维数组,赋值分为数组的初始化和数组元素的赋值。初始化的方式有用字符初始化和用字符串初始化两种,也有用初始值表进行初始化的。
  (1).用字符初始化数组
  例如:
      char chr1[5]={‘a’,‘b’,‘c’,‘d’,‘e’};  初始值表中的每个数据项是一个字符,用字符给数组chr1的各个元素初始化。当初始值个数少于元素个数时,从首元素开始赋值,剩余元素默认为空字符。
  字符数组中也可以存放若干个字符,也可以来存放字符串。两者的区别是字符串有一结束符(‘\0’)。反过来说,在一维字符数组中存放着带有结束符的若干个字符称为字符串。字符串是一维数组,但是一维字符数组不等于字符串。
  例如:
       char chr2[5]={‘a’,‘b’,‘c’,‘d’,‘\0’}; 即在数组chr2中存放着一个字符串“abcd”。

(2).用字符串初始化数组

  用一个字符串初始化一个一维字符数组,可以写成下列形式:
        char chr2[6]=“abcde”;   使用此格式均要注意字符串的长度应小于字符数组的大小或等于字符数组的大小减1。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#include <iostream>
#include <cstring>
using namespace std;
int main(){
    char a[]="abcde";
   if(a[5]=='\0')
    cout<<"ok"<<endl;
    for (int i = 0; i <6 ; ++i) {
        cout<<a[i];
        }
        cout<<endl;
        cout<<strlen(a)<<endl; 
// strlen without including the terminating null character itself
    return 0;
}

edit & run

如果输入为: “acde efghi” ,下面程序会输出什么?

1
2
3
4
5
6
7
8
9
#include <iostream>
#include <cstring>
using namespace std;
int main(){
    char a[1000],b[1000];
    cin>>a>>b;
    cout<<strlen(a)<<endl;
    cout<<strlen(b);
}

字符串处理函数
  系统提供了一些字符串处理函数,用来为用户提供一些字符串的运算。常用的字符串函数介绍如下。

函数格式函数功能
strcat(字符串名1,字符串名2)将字符串2连接到字符串1后边,返回字符串1的值。
strncat(字符串名1,字符串名2,长度n)将字符串2n个字符连接到字符串1后边,返回字符串1的值。
strcpy(字符串名1,字符串名2)将字符串2复制到字符串1后边,返回字符串1的值。
strncpy(字符串名1,字符串名2,长度n)将字符串2n个字符复制到字符串1后边,返回字符串1的值。
strcmp(字符串名1,字符串名2)比较字符串1和字符串2的大小,比较的结果由函数带回; 如果字符串1>字符串2,返回一个正整数; 如果字符串1=字符串2,返回0 如果字符串1<字符串2,返回一个负整数;
strncmp(字符串名1,字符串名2,长度n)比较字符串1和字符串2的前n个字符进行比较,函数返回值的情况同strcmp函数;
strlen(字符串名)计算字符串的长度,终止符’\0’不算在长度之内
strlwr(字符串名)将字符串中大写字母换成小写字母
strupr(字符串名)将字符串中小写字母换成大写字母
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <cstring>
#include<iostream>
using namespace std;
int main()
{
     char s1[20] = "hello";
     char s2[20] = "helloworld";
     
   
     if (strcmp(s1, s2) ==0)
     {
       cout<<"string 1 and string 2 are equal";
     }else
      {
         cout<<"string 1 and 2 are different";
      }
      cout<<endl;
     
      if (strncmp(s1, s2, 5) ==0)
     {
        cout<<"string 1 and string 2 are equal";
     }else
     {
         cout<<"string 1 and 2 are different";
     }
     cout<<endl;
     
     strcat(s1,s2);
     cout<<"Output string after concatenation: "<<s1;
     cout<<endl;
     
     strncat(s1,s2, 3);
     cout<<"Concatenation using strncat: "<<s1;
     cout<<endl;
     
     strcpy(s1,s2);
     cout<<"String s1 is: "<<s1;
     cout<<endl;
     
     strncpy(s1,s2,6);
     cout<<"String s1 is: "<<s1;
     
     return 0;
}

习题:试做程序,给定两个字符串,判断两字符串前5位是否相等,如果不相等则将两字符串相连,如果相等则复制字符串二给到字符串一
例如 a=hello b=hellobeijing 输出为a=hellobeijing

Scroll to Top