C编程中的字符串

时间:2020-02-23 14:32:06  来源:igfitidea点击:

C编程中的字符串是一个字符数组,在末尾索引后附加一个NULL字符('\ 0')。
与字符数组不同,c字符串是由编译器视为单个项目的一系列字符。
但是就像数组一样,字符串也可以与其索引一起遍历。

1.用C声明字符串

用C声明字符串与使用字符数组的情况完全相同。

char String_Name [元素数量];

注意:这里的元素数量也应包含NULL字符('\ 0'`)。

char demo[10];

2. C语言中的字符串初始化

C中的字符串可以用不同的方式初始化。
通过指定单个字符(如下面的示例2和4)来创建字符串时,还应确保将NULL字符添加到其中。

  • char string [20] =" theitroad";
  • char string [20] = {'i','g','i','f','t','i','d','e','a','\ 0 '};
  • char string [] =" theitroad";
  • char string [] = {'i','g','i','f','t','i','d','e','a','\ 0 '};

对于第3和第4种情况,最初并未提及元素的数量。
在这些情况下,默认情况下,数组的大小设置为元素总数(包括" \ 0")。

3.在C中遍历一个字符串

例如,让我们看一下如何像数组一样遍历字符串。

char string[20]="theitroad";
char ch;
int i=0;
ch=string[i];
while(ch!=NULL)
{
   printf("%c",ch);
   i++;
   ch=string[i];
}

输出:

theitroad

4.用C读取字符串(使用scanf()gets()或者fgets())

scanf()或者gets()函数都可用于从用户读取字符串。
但是,不幸的是,scanf()函数仅读取一个字符序列,直到遇到换行符,空格或者制表符等为止。
gets()读取字符序列,直到换行符(或者Enter键) 。
另外,fgets()被用来避免由于gets()导致的缓冲区溢出。
让我们看一下上述所有功能的工作原理。

例如,

#include<stdio.h>
int main()
{
  char string_input[20];
  printf("Enter the string: ");
  scanf("%s", string_input);
  puts(string_input);
}

输出:

使用scanf()输入

如您所见,由于字符串之间存在空格,所以scanf()只接受第一个空格之前的字符。
这可以通过gets()函数避免。

#include<stdio.h>
int main()
{
  char string_input[20];
  printf("Enter the string: ");
  gets(string_input);
  puts(string_input);
}

输出:

使用gets()输入

再次使用fgets()函数,

#include<stdio.h>
int main()
{
  char string_input[20];
  printf("Enter the string: ");
  fgets(string_input,sizeof(string_input),stdin);
  puts(string_input);
}

5. C字符串库函数

标准的C库包含许多内置的面向字符串的函数。
所有这些功能都在string.h头文件中。
因此,包含string.h头文件对于简化字符串操作将很有用。

一些常见的函数是

  • strlen(string)–此函数返回传递的字符串的长度或者字符串中元素的总数,
  • strcmp(string1,string2)–这个函数比较两个字符串。
    如果两个字符串相等,则返回0,否则返回非零值,
  • strcat(string1,string2)–这个函数连接两个给定的字符串。
    它将string2追加到string1的末尾,并将结果存储到string1,
  • strcpy(string1,string2)–此函数将string2的内容复制到string1中,
  • strrev(string)-这个函数反转里面的字符串,
  • 还有很多。