字符串

作者: qiqi 分类: c++ 发布时间: 2024-07-25 22:28

字符串是C语言中最有用、最重要的数据类型之一,他是由一个或多个字符组成的序列(包括:数字、字母、符号、空格等),比如在学习框架中输出的:“Hello World!”。 要注意:双引号不是字符串的一部分。双引号仅告诉编译器它括起来的是字符串。在C语言中,双引号括起来的内容称为字符串常量。由于C语言中不存在字符串变量,所以只能通过字符数组来存储字符串的内容。字符串在存储时会以以空字符('\0'​)结尾,这个空字符表示字符串的结束。

1.字符串的存储
char str1[] = “Hello World!”;
char str2[20] = “Hello World!”;
char str3[] = {‘H’, ‘e’, ‘l’, ‘l’, ‘o’, ‘\0’};
str1​ 是一个自动大小的字符数组,编译器会根据字符串的长度自动分配足够的空间,并包含结尾的空字符。
​​str2​ 是一个固定大小的字符数组,即使字符串的长度小于数组的大小,数组也会被初始化为包含字符串和结尾的空字符。
​​str3​ 是一个手动初始化的字符数组,必须显式地包含结尾的空字符。

2.字符串的输入和输出
虽然字符串是以数组作为存储载体,但他可以作为整体来直接输入和输出。例如:

#include <bits/stdc++.h>
using namespace std;
#define N 100
char str[N];

int main()
{
	cin >> str;
	cout << str << endl;

	return 0;
}
cin和cout也可以换成scanf()和printf()函数。例如:
	scanf("%s", str);//注意这里不需要取地址符&
	printf("%s\n",str);
这里需要注意的是,无论用cin或者是scanf()函数,在控制台输入的字符串如果中间有空格会自动认为字符串结束的。如果需要输入有空格的字符串需要使用cin.getline()函数。代码如下:
	cin.getline(str, N);
当然字符串作为字符数组的一个特例,字符数组所具备的所有功能,字符串也都同样具备。比如我们可以通过索引访问和修改字符串中的任意有一个字符。

3.常用字符串函数
(1)计算字符串的长度
size_t strlen(const char *str)
需要注意的是,字符串的长度是字符串中字符的数量,并不包括’\0’。字符串的长度与字符数组的大小并不是一个概念。前者是根据内容的不同可能有所不同,后者是定义数组是就确定的。字符数组的大小用sizeof()关键字可以计算。参考代码如下:

int main()
{
    char str[] = "Hello, World!";
    int length = strlen(str);
    printf("Length of string: %d\n", length);  // 输出 13
    return 0;
}
(2)字符串的比较
字符串比较不能直接使用 ​==​ 运算符,因为 ​==​ 比较的是两个指针的值(即地址),而不是字符串的内容。可以使用标准库函数 ​strcmp​ 来进行字符串比较。例如:
#include <bits/stdc++.h>
using namespace std;

char str1[] = "Hello";
char str2[] = "Hello";

int main()
{

	if (strcmp(str1, str2) == 0)
	{
		printf("Strings are equal\n");
	}
	else
	{
		printf("Strings are not equal\n");
	}
	return 0;
}
如果字符串str1大于str2,strcmp()函数返回一个大于零的整数;如果字符串str1等于str2,strcmp()函数返回零;如果字符串str1小于str2,strcmp()函数返回一个小于零的整数;

(3)字符串的连接和复制。字符串的连接和复制可以使用标准库函数 ​strcat​() 和 ​strcpy()​。例如:
#include <bits/stdc++.h>
using namespace std;

int main()
{
	char str1[50] = "Hello";
	char str2[] = " World!";
	strcat(str1, str2);  // 连接 str2 到 str1
	printf("%s\n", str1);  // 输出 "Hello World!"

	char str3[50];
	strcpy(str3, str1);  // 复制 str1 到 str3
	printf("%s\n", str3);  // 输出 "Hello World!"
	return 0;
}
(4)在字符串中查找字符
在参数 str 所指向的字符串中搜索第一次出现字符 c(一个无符号字符)的位置。如果在字符串 str 中找到字符 c,则函数返回指向该字符的指针,如果未找到该字符则返回 NULL。函数原型如下:
        char *strchr(const char *str, int c)
其中:
        str -- 被查找的字符串;
        c -- 要查找的字符。

(5)在字符串中查找字符串
在字符串 haystack 中查找第一次出现字符串 needle 的位置,不包含终止符 '\0'。如果找到子串needle,函数返回在 haystack 中第一次出现 needle 字符串的位置,如果未找到则返回 NULL。函数原型如下:
        char *strstr(const char *haystack, const char *needle)
其中:
        haystack -- 要被检索的 C 字符串。
        needle -- 在 haystack 字符串内要搜索的小字符串。
(6)数字字符串转整数。
       int atoi(const char *str)
(7)整数转字符串
      char* itoa(int value,char*string,int radix)
其中:
      value -- 要转换的整数
      string -- 转换后的字符串
       radix -- 转换进制数,如2,8,10,16 进制等。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云