c语言 11字符,11-C语言中的字符串

数学和数学,代码与代码,但是在现实世界中,我们必须处理单词,句子等。C语言中是否有任何东西可以处理这些类型的事物?答案是肯定的,它们被称为string。

我们可以将字符串视为字符数组,例如“ Sam”是字符串。字符'S''a''m''\ 0'

下标0123

因此,“ Sam”是字符“ S”,“ a”,“ m”和“ \ 0”的数组

查看第3个索引处的字符。它代表空字符。ASCII值的“\ 0”是0和的正常0是48。它表示字符串的终止(结束)。

我们将字符串声明为:

char name [] =“ Sam”;

如您所见,字符串(char name[])的语法还告诉我们它是一个字符数组。

我们总是在“”中放置一个字符串,在“”中放置一个字符。

我们还可以使用字符声明一个字符串变量,如下所示。

char name [] = {'S','a','m','\ 0'};

让我们看两个示例,分别显示不带for循环和带循环的字符串。#include 

int main()

{

char str[ ] = "Hello";

printf("%s\n", str);

return 0;

}

请注意,“%s”用于字符串。

在上面的示例中,我们一次打印了整个字符串。现在,我们将看到相同的示例,但使用for循环打印单个字符。#include 

int main()

{

char str[ ] = "Hello";

int i;

for( i=0; i<6; i++)

{

printf("%c\n", str[i]);

}

return 0;

}

在第一个示例中,我们打印了字符串,并为此%s与printf函数一起使用。而在第二个示例中,我们每次只打印单个字符,因此我们使用%c了该printf函数。

现在,让我们看一个从用户输入字符串的示例。#include 

int main()

{

char name[25];

printf("Enter your name\n");

scanf("%s", name);

printf("Your name is %s\n", name);

return 0;

}

您一定想知道在声明名称数组时将数组大小写为25的原因。这样做是因为我们不知道用户将输入的名称的长度。如果在上面的示例中,我们将数组的大小指定为2,则字符串变量将不会采用输入,因为输入的大小大于数组的大小。因此,为了安全起见,请采用大于假定的输入大小的数组大小。

在使用scanf从用户那里获取字符串时,请勿在字符串名称前使用“&”,因为在“ name [25]”中,“ name”本身就是指向“ name [25]”的指针。

scanf从用户到字符串变量仅需要一个词。它以任何空白结尾。尝试在空格后写点东西,这只会占用第一个单词。

例如,如果在上面的示例中,我们输入Sam Brad作为名称,则输出将仅是Sam,因为scanf仅考虑一个单词并在第一个单词之后终止。

如何获取多行字串#include 

int main()

{

char name[25];

printf("Enter your name\n");

gets(name);

printf("Your name is ");

puts(name);

return 0;

}

我们可以使用gets和puts接受输入并给出包含多个单词的字符串的输出,其中gets用于获取用户的字符串输入,而puts用于显示字符串。

考虑以下示例。

如果您收到关于“获取”的任何警告,请忽略它。

要进行打印,您也可以使用printf代替puts。

您也可以使用'scanf(“%[^ \ n] s”,name);' 用于获取多字串。

指针和字符串

字符串也可以使用指针声明。让我们考虑一个例子。#include 

int main()

{

char name[ ]= "Sam";

char *p;

p = name; /* for string, only this declaration will store its base address */

while( *p != '\0')

{

printf("%c", *p);

p++;

}

return 0;

}

在上面的示例中,“ p”存储名称[0]的地址,因此“ * p”的值等于名称[0]的值,即“ S”。因此,在while循环中,第一个字符被打印出来,并将p++'p'的值加1,以便现在p + 1指向name [1]。这一直持续到指针到达字符串的末尾,即,在'* p'等于'\ 0'之前。

将字符串传递给函数

这与我们处理其他阵列相同。唯一的区别是这是一个字符数组。而已!

让我们来看一个例子。#include 

void display( char ch[])

{

printf("String :");

puts(ch); /* display string */

}

int main()

{

char arr[30];

printf("Enter string\n");

gets(arr); /* input string from user */

display(arr);

return 0;

}

预定义的字符串函数

我们可以执行不同类型的字符串功能,例如连接2个字符串,将一个字符串与另一个字符串进行比较或找到字符串的长度。让我们看一下这些函数的列表。函数用途

len计算字符串的长度

strcat在另一个字符串的末尾附加一个字符串

Strncat在另一个字符串的末尾追加字符串的前n个字符

strcpy将字符串复制到另一个

strncpy将一个字符串的前n个字符复制到另一个

strcmp比较两个字符串

strncmp比较两个字符串的前n个字符

strchr查找字符串中给定字符的首次出现

strrchr查找字符串中给定字符的最后一次出现

strstr查找另一个字符串中给定字符串的首次出现

这些函数在“ string.h”头文件中定义,因此我们需要通过编写以下代码在代码中包含该头文件

#include

我们将看到一些例子strlen,strcpy,strcat和strcmp因为这些是最常用的。

确保检查本章进一步阅读中提到的文章,以查看string.h库中每个可用功能的示例。

strlen(s1)计算字符串s1的长度。

空格也以字符串的长度计算。#include 

#include 

int main()

{

char name[ ]= "Hello";

int len1, len2;

len1 = strlen(name);

len2 = strlen("Hello World");

printf("length of %s = %d\n", name, len1);

printf("length of %s = %d\n", "Hello World", len2);

return 0;

}

在计算字符串的长度时,strlen不会计数“ \ 0”。

strcpy(s1, s2)将第二个字符串s2复制到第一个字符串s1。#include 

#include 

int main()

{

char s2[ ]= "Hello";

char s1[10];

strcpy(s1, s2);

printf("Source string = %s\n", s2);

printf("Target string = %s\n", s1);

return 0;

}

strcat(s1, s2)将第二个字符串s2连接(连接)到第一个字符串s1。#include 

#include 

int main()

{

char s2[ ]= "World";

char s1[20]= "Hello";

strcat(s1, s2);

printf("Source string = %s\n", s2);

printf("Target string = %s\n", s1);

return 0;

}

请注意,在上面的示例中,我们将数组大小指定为“ s1”,因为我们要向其中添加另一个字符串的字符。给定的数组大小应大于或等于串联后的字符串数组的大小。

strcmp(s1, s2)比较两个字符串,找出它们是否相同。它逐字符比较两个字符串,直到不匹配为止。如果两个字符串相同,则返回0。如果不是,则返回第一个非匹配字符对的ASCII值之间的差#include 

#include 

int main()

{

char s1[ ]= "Hello";

char s2[ ]= "World";

int i, j;

i = strcmp(s1, "Hello");

j = strcmp(s1, s2);

printf("%d \n %d\n", i, j);

return 0;

}

二维字符数组

与整数和其他数据类型的2 D数组相同,我们也有2 D字符数组。

例如,我们可以写char names[4][10] = {

"Andrew",

"Kary",

"Brown",

"Lawren"

};

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值