C语言教程
C语言控制语句
C语言函数
C语言数组
C语言指针
C语言字符串
C语言数学函数
C语言结构
C语言文件处理
C预处理器

C语言字符串

可以将字符串定义为以空字符('\0')终止的一维字符数组。字符数组或字符串用于处理诸如单词或句子之类的文本。数组中的每个字符占用一个字节的内存,最后一个字符必须始终为0。终止符('\ 0')在字符串中很重要,因为这是识别字符串结尾的唯一方法。当我们将字符串定义为char s [10]时,字符s [10]被隐式初始化为内存中的null。
有两种方法可以用C语言声明字符串。
通过char数组 按字符串文字
让我们看一下用C语言通过char数组声明 string 的示例。
char ch[10]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
我们知道,数组索引从0开始,因此将如下图所示。
 C字符串
在声明字符串时,大小不是必需的。因此,我们可以编写上面的代码,如下所示:
char ch[]={'j', 'a', 'v', 'a', 't', 'p', 'o', 'i', 'n', 't', '\0'};
我们还可以使用C语言中的字符串文字来定义字符串。例如:
char ch[]="lidihuo";
在这种情况下,编译器将在字符串的末尾附加'\ 0'。

char数组与字符串文字之间的区别

char数组和文字之间有两个主要区别。
我们需要自己在数组末尾添加空字符'\ 0',而对于字符数组,它是由编译器在内部添加的。 不能将字符串文字重新分配给另一组字符,而我们可以重新分配数组的字符。

C中的字符串示例

让我们看一个简单的示例,其中声明并打印了一个字符串。 '%s'用作c语言字符串的格式说明符。
#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]="lidihuo";  
  
   printf("Char Array Value is: %s\n", ch);  
   printf("String Literal Value is: %s\n", ch2);  
 return 0;  
}  
输出
Char Array Value is: lidihuo
String Literal Value is: lidihuo

遍历字符串

遍历字符串是任何一种编程语言中最重要的方面之一。我们可能需要处理非常大的文本,这可以通过遍历文本来完成。遍历字符串与遍历整数数组有些不同。我们需要知道数组的长度才能遍历整数数组,而对于字符串,我们可以使用空字符来标识字符串的结尾并终止循环。
因此,有两个遍历字符串的方法。
使用字符串的长度 使用空字符。
让我们讨论它们中的每一个。

使用字符串的长度

让我们看一个计算音素中元音数量的示例。字符串。
#include<stdio.h>
void main ()
{
    char s[11] = "lidihuo";
    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] = "lidihuo";
    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);
}
输出
Enter the string?lidihuo is the best                                                                 
You entered lidihuo
从输出中很明显,以上代码不适用于以空格分隔的字符串。为了使该代码适用于以空格分隔的字符串,需要在scanf函数中进行较小的更改,即,必须编写: scanf("%[^ \ n] s"而不是编写scanf("%s",s) ,s)指示编译器在遇到新行(\ n)时存储字符串s。让我们考虑下面的示例来存储以空格分隔的字符串。
#include<stdio.h>
void main ()
{
    char s[20];
    printf("Enter the string?");
    scanf("%[^\n]s",s);
    printf("You entered %s",s);
}
输出
Enter the string?lidihuo is the best
You entered lidihuo is the best
在这里,我们还必须注意,由于字符串s是一个字符数组,并且数组的名称(即s表示基地址),因此我们不需要在scanf中使用(&)运算符的地址来存储字符串。

一些重要点

但是,在使用字符串时,必须注意以下几点。通过使用scanf输入字符串。
编译器不对字符数组执行边界检查。因此,在某些情况下,字符串的长度可能会超出字符数组的大小,这可能会始终覆盖一些重要数据。 我们可以使用gets()而不是使用scanf,它是在头文件string.h中定义的内置函数。 gets()一次只能接收一个字符串。

带字符串的指针

到目前为止,我们已将指针与数组,函数和原始数据类型一起使用。但是,可以使用指针指向字符串。使用指针指向字符串有很多优点。让我们考虑以下示例,通过指针访问字符串。
#include<stdio.h>
void main ()
{
    char s[11] = "lidihuo";
    char *p = s; // pointer p is pointing to string s. 
    printf("%s",p); // the string lidihuo is printed if we print p.
}
输出
lidihuo
C字符串
我们知道字符串是一个字符数组,因此可以在相同的位置使用指针它们与数组一起使用的方式。在上面的示例中,p被声明为指向字符s的指针。 P的影响与s相似,因为s是字符串的基地址,在内部被视为指针。但是,我们不能更改s的内容或将s的内容直接复制到另一个字符串中。为此,我们需要使用指针来存储字符串。在下面的示例中,我们展示了如何使用指针将字符串的内容复制到另一个字符串中。
#include<stdio.h>
void main ()
{
    char *p = "hello lidihuo";
    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 lidihuo 
copying the content of p into q... 
String q: hello lidihuo 
一旦定义了字符串,就不能将其重新分配给另一组字符。但是,使用指针,我们可以将字符集分配给字符串。请考虑以下示例。
#include<stdio.h>
void main ()
{
    char *p = "hello lidihuo";
    printf("Before assigning: %s\n",p);
    p = "hello";
    printf("After assigning: %s\n",p);
}
输出
Before assigning: hello lidihuo  
After assigning: hello

昵称: 邮箱:
Copyright © 2022 立地货 All Rights Reserved.
备案号:京ICP备14037608号-4