6.C语言之字符串

本文深入讲解C语言中的字符串处理技巧,包括字符串的基础概念、字符数组与指针的区别、字符串的输入输出方法等,并通过实例演示如何高效使用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 字符串入门

字符串也称字符串字面量,是用一对双引号括起来的字符序列。

我们也许经常会遇到字符串特别长的情况,在C#中,我们一般会用@符号来表示。

    Console.WriteLine(@"Hello
                        World");

但是在C中,我们会这样来写:

int main()
{
    printf("Hello "
        "world");
    return 0;
}

还记得我曾经讲的最多的一句话就是,把字符串当做字符数组来玩。

其实在本质上,C语言就是把字符串作为字符数组来处理,当C语言编译器遇到长度为N的字符串时,它会为字符串字面量分配长度为N+1的内存空间。之所以为N+1,是因为在字符串的末尾以’\0’来结尾,来标识字符串的结束。

既然,我们说字符串在编译器中以字符数组来处理,那么编译器自然会将其看成char *类型的指针。也就是说,我们可以这样来写:

int main()
{
    char *str="abc";
    printf("%s",str);
}

2. 字符数组和字符指针

这样的两个声明:

char str1[]="abc";
char *str2="def";

前者是普通的字符数组,后者是字符指针。两者都可以用作字符串,但是他们是不一样的。

声明为数组时,就像其他常规的数组一样,可以随意修改数组中的元素,即字符串中的字符。但是用字符指针,我们是不能修改的。

另外,声明为数组时,我们知道我们不能将这个数组名赋给其他的数组,但是如果用指针,我们则可以将该指针指向其他的字符串。

用最简单的例子来说明:

char str1[]="abc";
char *str2="def";
*str2='q'; //Error
str1[0]='q';

前者是错误的,后者是正确的。

3. 声明字符数组的惯用法

看段代码就OK了

#define STR_LEN 10

int main()
{
    char str[STR_LEN+1];
}

在宏定义处强调的是字符串的大小,而在声明字符数组的时候,将宏定义加1,因为要存储”\0”。

4. 字符串的输入输出

字符串的输出方式有两种,printf和puts,下面的例子足以说明他们的区别:

int main()
{
    puts("Hello world");
    printf("Hello world");
    return 0;
}

运行结果如下:

image

答案就是一个有换行,一个没有换行。

读取字符串也有两个方法:scanf和gets函数。

我们来说下他们的区别:

scanf会忽略掉之前所有的空白字符,然后读取所有字符,直到遇到空白字符位置。总之,scanf不会包含任何空白字符,包括空格,制表符等等。

gets不会忽略空白字符,读取所有字符,直到遇到换行符为止。

举个例子吧:

int main()
{
    char str1[100];
    scanf("%s",str1);
    printf("printf的?结á果?:%s",str1);
}

image

int main()
{
    char str2[100];
    gets(str2);
    printf("gets的?结á果?:%s",str2);
    return 0;
}

image

 

 

资源下载链接为: https://pan.quark.cn/s/f989b9092fc5 今天给大家分享一个关于C#自定义字符串替换方法的实例,希望能对大家有所帮助。具体介绍如下: 之前我遇到了一个算法题,题目要求将一个字符串中的某些片段替换为指定的新字符串片段。例如,对于源字符串“abcdeabcdfbcdefg”,需要将其中的“cde”替换为“12345”,最终得到的结果字符串是“ab12345abcdfb12345fg”,即从“abcdeabcdfbcdefg”变为“ab12345abcdfb12345fg”。 经过分析,我发现不能直接使用C#自带的string.Replace方法来实现这个功能。于是,我决定自定义一个方法来完成这个任务。这个方法的参数包括:原始字符串originalString、需要被替换的字符串片段strToBeReplaced以及用于替换的新字符串片段newString。 在实现过程中,我首先遍历原始字符串,查找需要被替换的字符串片段strToBeReplaced出现的位置。找到后,就将其替换为新字符串片段newString。需要注意的是,在替换过程中,要确保替换操作不会影响后续的查找和替换,避免遗漏或重复替换的情况发生。 以下是实现代码的大概逻辑: 初始化一个空的字符串result,用于存储最终替换后的结果。 使用IndexOf方法在原始字符串中查找strToBeReplaced的位置。 如果找到了,就将originalString中从开头到strToBeReplaced出现位置之前的部分,以及newString拼接到result中,然后将originalString的查找范围更新为strToBeReplaced之后的部分。 如果没有找到,就直接将剩余的originalString拼接到result中。 重复上述步骤,直到originalStr
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值