C中的字符串:如何声明变量、初始化、打印、示例

发布于:2021-02-21 00:05:20

1

725

0

C 声明变量 初始化 打印 示例

C中的String是什么?

C中的字符串只不过是线性序列中字符的集合。“C”总是将字符串视为单个数据,即使它包含空格。使用单引号表示法定义单个字符。字符串用双引号表示。

Example, "Welcome to the world of programming!"

'C'提供了标准库<string.h>,其中包含许多函数,可用于轻松地对C中的字符串执行复杂的操作。

如何在C中声明和初始化字符串

C字符串是以char作为数据类型的简单数组。“C”语言不直接支持字符串作为数据类型。因此,要在C中显示字符串,需要使用字符数组。

在C中将变量声明为字符串的一般语法如下:

char string_variable_name [array_size];

字符串的经典声明可以如下所示:

char string_name[string_length] = "string";

声明C字符串变量时必须定义数组的大小,因为它用于计算C字符串变量中要存储的字符数。字符串声明的一些有效示例如下:

char first_name[15];    //declaration of a string variable
char last_name[15];

上面的示例表示数组大小为15的字符串变量。这意味着给定的C字符串数组最多只能容纳15个字符。数组的索引从0开始,因此它将存储0-14位置的字符。C编译器会自动将空字符“| 0”添加到创建的字符数组中。

让我们研究一下C中的字符串初始化。下面的示例演示了C中字符串的初始化

char first_name[15] = "ANTHONY";
char first_name[15] = {'A','N','T','H','O','N','Y',''}; // NULL character '' is required at end in this declaration
char string1 [6] = "hello";/* string size = 'h'+'e'+'l'+'l'+'o'+"NULL" = 6 */
char string2 [ ] = "world";  /* string size = 'w'+'o'+'r'+'l'+'d'+"NULL" = 6 */
char string3[6] = {'h', 'e', 'l', 'l', 'o', ''} ; /*Declaration as set of characters ,Size 6*/

在string3中,必须显式添加空字符,并且字符用单引号括起来。

“C”还允许我们在不定义字符数组大小的情况下初始化字符串变量。可以通过以下方式实现。

char first_name[ ] = "NATHAN";

C中字符串的名称用作指针,因为它基本上是一个数组。

字符串输入:读取字符串

在编写要求用户输入的交互式程序时,C提供scanf()、get()和fgets()函数来查找用户输入的一行文本。

使用scanf()读取时,我们使用“%s”格式说明符而不使用“&;”来访问变量地址,因为数组名充当指针。例如:

#includeint main() {
char name[10];
int age;
printf("Enter your first name and age: n");
scanf("%s %d", name, &age);
printf("You entered: %s %d",name,age);
}

输出:

Enter your first name and age:
John_Smith 48

scanf函数的问题是它从不读取C中的整个字符串。一旦出现空格、换行符、垂直制表符、换行符或回车符,它就会停止读取过程。假设我们以“Guru99 Tutorials”的形式提供输入,那么scanf函数将永远不会读取整个字符串,因为两个名称之间会出现一个空格字符。scanf函数将只读取Guru99。

为了读取包含空格的字符串,我们使用gets()函数。获取忽略空格。当到达换行符(按下回车键)时,它停止读取。例如:

#include <stdio.h>
int main() {
char full_name[25];
printf("Enter your full name: ");
gets(full_name);
printf("My full name is %s ",full_name);
return 0;
}

输出:

Enter your full name: Dennis Ritchie
My full name is Dennis Ritchie

另一个比gets()更安全的替代方法是fgets()函数,它读取指定数量的字符。例如:

#include <stdio.h>
int main() {
char name[10];
printf("Enter your  name plz: ");
fgets(name, 10, stdin);
printf("My name is %s ",name);
return 0;}

输出:

Enter your name plz: Carlos
My name is Carlos

fgets()参数是:

  • 字符串名,

  • 要读取的字符数,

  • stdin表示从标准输入(即键盘)读取。

字符串输出:打印/显示字符串

标准printf函数用于在输出设备上以C打印或显示字符串。使用的格式说明符是%s。

例如

printf("%s", name);

字符串输出是通过fputs()和printf()函数完成的。

fputs()函数

fputs()需要字符串的名称和指向要显示文本的位置的指针。我们使用标准输出的stdout来打印到屏幕。用于示例:

#include <stdio.h>
int main()
{char town[40];
 printf("Enter your town: ");
 gets(town);
 fputs(town, stdout);
 return 0;}

输出:

Enter your town: New York
New York

puts函数

puts函数用于在输出设备上打印C中的字符串,并将光标移回第一个位置。puts函数可按以下方式使用:

#include <stdio.h>
int main() {
char name[15];
gets(name);        //reads a string
puts(name);        //displays a string
return 0;}

这个函数的语法比其他函数简单。

字符串库

标准的“ C”库提供各种功能来操纵程序中的字符串。这些函数也称为字符串处理程序。所有这些处理程序都存在于<string.h>头文件中。

{xunruicms_img_title}

让我们考虑下面的程序,该程序演示了字符串库功能:

#include <stdio.h>
#include <string.h>
int main () {
//string initialization
char string1[15]="Hello";
char string2[15]=" World!";
char string3[15];
int val;

//string comparison
val= strcmp(string1,string2);
if(val==0){
   printf("Strings are equaln");
}
else{
   printf("Strings are not equaln");
}

//string concatenation
printf("Concatenated string:%s",strcat(string1,string2)); //string1 contains hello world!

//string length
printf("nLength of first string:%d",strlen(string1));
printf("nLength of second string:%d",strlen(string2));

//string copy
printf("nCopied string is:%sn",strcpy(string3,string1));  //string1 is copied into string3
return 0;
}

输出:

Strings are not equal
Concatenated string:Hello World!
Length of first string:12
Length of second string:7
Copied string is:Hello World!

其他重要的库函数包括:

  • strncmp(str1,str2,n):如果str1的前n个字符等于str2的前n个字符,则返回0;如果str1 <str2,则小于0;如果str1> str2,则大于0。

  • strncpy(str1,str2,n)此函数用于从另一个字符串复制一个字符串。将str2的前n个字符复制到str1

  • strchr(str1,c):它返回指向str1中首次出现的char c的指针,如果找不到字符,则返回NULL。

  • strrchr(str1,c):它反向搜索str1并返回一个指向char c在str1中位置的指针;如果找不到字符,则返回NULL。

  • strstr(str1,str2):它返回指向str1中第一次出现的str2的指针,如果未找到str2,则返回NULL。

  • strncat(str1,str2,n)将str2的前n个字符附加(连接)到str1的末尾,并返回指向str1的指针。

  • strlwr():将字符串转换为小写。

  • strupr():将字符串转换为大写。

  • strrev():反转字符串。

将字符串转换为数字

在C编程中,我们可以将一串数字字符转换为一个数字值,以防止运行时错误。stdio.h库包含以下用于将字符串转换为数字的函数:

  • int atoi(str)代表ASCII到整数;它将str转换为等效的int值。如果第一个字符不是数字或未遇到数字,则返回0。

  • double atof(str)表示ASCII浮动,它将str转换为等效的double值。如果第一个字符不是数字或未遇到数字,则返回0.0。

  • long int atol(str)代表ASCII到long int,将str转换为等效的long整数值。如果第一个字符不是数字或未遇到数字,则返回0。

以下程序演示了atoi()函数:

#include <stdio.h>
int main()
{char *string_id[10];
 int ID;
 printf("Enter a number: ");
 gets(string_id);
 ID = atoi(string_id);
  printf("you enter %d  ",ID);
 return 0;}

输出:

Enter a number: 221348
you enter 221348

  • 字符串指针声明(例如char * string =“ language”)是常量,不能修改。

概要

  • 字符串是存储在字符数组中的一系列字符。

  • 字符串是用双引号引起来的文本。

  • 诸如“ d”之类的字符不是字符串,而是用单引号引起来。

  • “ C”提供了标准的库函数来处理程序中的字符串。字符串操纵器存储在<string.h>头文件中。

  • 在用于程序之前,必须声明或初始化字符串。

  • 有不同的输入和输出字符串函数,每个函数都有其功能。

  • 不要忘记包括字符串库以使用其功能

  • 我们可以通过atoi(),atof()和atol()将字符串转换为数字,这对于编码和解码过程非常有用。

  • 我们可以通过在C中定义字符串数组来操纵不同的字符串。