c字符串

本文概述

  • C中的字符串示例
  • 遍历字符串
  • 接受字符串作为输入
  • 带有字符串的指针
可以将字符串定义为以null(’ \ 0’ )结尾的一维字符数组。字符数组或字符串用于处理诸如单词或句子之类的文本。数组中的每个字符占用一个字节的内存,最后一个字符必须始终为0。终止符(’ \ 0’ )在字符串中很重要,因为这是识别字符串结尾的唯一方法。当我们将字符串定义为char s [10]时,字符s [10]被隐式初始化为内存中的null。
有两种方法可以使用C语言声明字符串。
  1. 按字符数组
  2. 按字符串文字
让我们看一下用C语言通过char数组声明字符串的示例。
char ch[10]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};

众所周知,数组索引从0开始,因此将如下图所示。
在声明字符串时,大小不是必需的。因此,我们可以编写以下代码,如下所示:
char ch[]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};

我们还可以使用C语言中的字符串文字来定义字符串。例如:
char ch[]="srcmini";

在这种情况下,编译器将在字符串的末尾附加“ \ 0”。
char数组和字符串文字之间的区别
char数组和文字之间有两个主要区别。
  • 我们需要自己在数组末尾添加空字符’ \ 0’ ,而在字符数组的情况下,它由编译器内部添加。
  • 字符串文字不能重新分配给另一组字符,而我们可以重新分配数组的字符。
C中的字符串示例让%27s%20see%20a%20simple%20example%20其中%20a%20string%20is%20声明为%20和%20being%20已打印。%20%20%27%s%27%20is%20used%20as%20a%20format%20specifier %20for%20the%20string%20in%20c%20language。
#include< stdio.h> #include < string.h> int main(){ char ch[11]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'}; char ch2[11]="srcmini"; printf("Char Array Value is: %s\n", ch); printf("String Literal Value is: %s\n", ch2); return 0; }

输出量
Char Array Value is: srcmini String Literal Value is: srcmini

遍历字符串在任何一种编程语言中,遍历字符串都是最重要的方面之一。我们可能需要处理非常大的文本,这可以通过遍历文本来完成。遍历字符串与遍历整数数组有些不同。我们需要知道数组的长度才能遍历整数数组,而对于字符串,我们可以使用空字符来标识字符串的结尾并终止循环。
因此,有两种遍历字符串的方法。
  • 通过使用字符串的长度
  • 通过使用空字符。
让我们讨论其中的每一个。
使用字符串的长度
让我们看一个计算字符串中元音数量的示例。
#include< stdio.h> void main () { char s[11] = "srcmini"; int i = 0; int count = 0; while(i< 11) { if(s[i]=='a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'u' || s[i] == 'o') { count ++; } i++; } printf("The number of vowels %d", count); }

输出量
The number of vowels 4

使用空字符
让我们看一下使用空字符计算元音数量的相同示例。
#include< stdio.h> void main () { char s[11] = "srcmini"; int i = 0; int count = 0; while(s[i] != NULL) { if(s[i]=='a' || s[i] == 'e' || s[i] == 'i' || s[i] == 'u' || s[i] == 'o') { count ++; } i++; } printf("The number of vowels %d", count); }

输出量
The number of vowels 4

接受字符串作为输入到目前为止,我们已经使用scanf接受来自用户的输入。但是,也可以在字符串的情况下使用它,但要使用不同的方案。考虑下面的代码,该代码在遇到空格时存储字符串。
#include< stdio.h> void main () { char s[20]; printf("Enter the string?"); scanf("%s", s); printf("You entered %s", s); }

【c字符串】输出量
Enter the string?srcmini is the best You entered srcmini

%20是%20clear%20从%20the%20output%20那%20the%20%20code%20will%20not%20work%20for%20space%20分隔的%20strings。%20To%20make%20this%20code%20working%20for%20the%20% 20space%20分隔的%20字符串,%20the%20minor%20changed%20required%20in%20the%20scanf%20function,%20e.e。,%20代替%20of%20writing%20scanf(%22%s%22,s),%20we %20must%20write:%20scanf(%22%[^ \ n] s%22,s)%20it%20指示%20the%20compiler%20to%20store%20the%20string%20s%20而%20the%20new%20line%20 (\ n)%20是遇到了%20。%20Let%27s%20考虑%20the%20,下面是%20example%20to%20store%20the%20用空格分隔的%20字符串。
#include< stdio.h> void main () { char s[20]; printf("Enter the string?"); scanf("%[^\n]s", s); printf("You entered %s", s); }

输出量
Enter the string?srcmini is the best You entered srcmini is the best

在这里我们还必须注意,我们不需要使用(
一些重点
但是,在使用scanf输入字符串时,必须注意以下几点。
  • 编译器不对字符数组执行边界检查。因此,可能会出现字符串的长度可能超过字符数组的尺寸的情况,这可能会始终覆盖一些重要数据。
  • 代替使用scanf,我们可以使用gets(),它是在头文件string.h中定义的内置函数。 gets()一次只能接收一个字符串。
带有字符串的指针到目前为止,我们已经将指针与数组,函数和原始数据类型一起使用。但是,可以使用指针指向字符串。使用指针指向字符串有很多优点。让我们考虑以下示例,通过指针访问字符串。
#include< stdio.h> void main () { char s[11] = "srcmini"; char *p = s; // pointer p is pointing to string s. printf("%s", p); // the string srcmini is printed if we print p. }

输出量
srcmini

众所周知,字符串是一个字符数组,指针的使用方式与数组相同。在上面的示例中,p被声明为指向字符s的指针。 P的影响与s相似,因为s是字符串的基地址,在内部被视为指针。但是,我们不能更改s的内容或将s的内容直接复制到另一个字符串中。为此,我们需要使用指针来存储字符串。在下面的示例中,我们展示了使用指针将字符串的内容复制到另一个字符串中的方法。
#include< stdio.h> void main () { char *p = "hello srcmini"; printf("String p: %s\n", p); char *q; printf("copying the content of p into q...\n"); q = p; printf("String q: %s\n", q); }

输出量
String p: hello srcmini copying the content of p into q... String q: hello srcmini

一旦定义了字符串,就不能将其重新分配给另一组字符。但是,使用指针,我们可以将字符集分配给字符串。考虑以下示例。
#include< stdio.h> void main () { char *p = "hello srcmini"; printf("Before assigning: %s\n", p); p = "hello"; printf("After assigning: %s\n", p); }

输出量
Before assigning: hello srcmini After assigning: hello

    推荐阅读