C语言基础——字符串的处理

  本文章为学习过程中遇到的知识点,故在此整理。也希望对有同样疑惑的伙伴有帮助。若有错,欢迎指出!

1.字符串复制

  字符串处理函数:strcpy函数,可将函数用于复制特定长度的字符串到另一个字符串中,其语法格式如下:strcpy(目的字符数组名,源字符数组名);其功能是将源字符串数组复制给目的字符数组(字符串结束标志"\0"也一同复制)。

示例代码:
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>



int main()

{

    char str1[30], strr2[30];

    printf("输入目的字符:\n");

    gets(str1);

    printf("输入源字符串:\n");

    gets(strr2);



    printf("输出目的字符串:\n");

    puts(str1);

    printf("输出源字符串:\n");

    puts(strr2);



    strcpy(str1, strr2);



    printf("调用strcpy函数进行字符串复制:\n");

    printf("复制字符串之后的目的字符串:\n");

    puts(str1);



    return 0;

}

2.字符串连接

  字符串连接就是将一个字符串连接到另一个字符串的末尾,使其组合成一个新的字符串,其语法格式为:strcat(目的字符数组名,源字符数组名);其功能是将字符数组中的字符串连接到目的字符数组中字符串的后面(删去目的字符数组中原有的串结束标志"\0")。

示例代码:
#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>



int main()

{

    char str1[30], str2[30];

    printf("输入目的字符串:\n");

    gets(str1);

    printf("输入源字符串:\n");

    gets(str2);



    printf("输出目的字符串:\n");

    puts(str1);

    printf("输出源字符串:\n");

    puts(str2);



    strcat(str1, str2);

    printf("调用strcat函数进行字符串连接:\n");

    puts(str1);



    return 0;

}

在VS中出现以下问题: C4996 'strcat': This function or variable may be unsafe. Consider using strcat_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.。可以通过添加以下代码解决: #define _CRT_SECURE_NO_WARNINGS

3.字符串比较

   字符串比较是将字符串与另一个字符串从首字母开始,按照ASCII码的顺序进行逐个比较,其语法格式为:strcmp(字符数组名1,字符数组名2);其功能为按照ASCII码的顺序比较两个数组中的字符,并由函数返回值返回比较结果。返回值如下:字符串1 = 字符串2,返回值为0;字符串1 > 字符串2,返回值为正数;字符串1 > 字符串2,返回值为负数。

示例代码:
#include <stdio.h>

#include <string.h>



int main()

{

    char user[20] = { "mirsoft" };    //设置用户名字符串

    char password[20] = { "mrkj" };    //设置密码字符串

    char ustr[20], pwstr[20];

    int i = 0;



    while (i < 3)

    {

        printf("输入用户名字符串:\n");

        gets(ustr);

        printf("输入密码字符串:\n");

        gets(pwstr);



        if (strcmp(user,ustr))

        {

            printf("用户字符串输入错误!\n");

        }

        else

        {

            if (strcmp(password,pwstr))

            {

                printf("密码字符串输入错误!\n");

            }

            else

            {

                printf("欢迎使用!\n");

                break;

            }

        }

        i++;

    }



    if (i == 3)

    {

        printf("输入字符串错误3次!\n");

    }



    return 0;

}

4.字符串大小写转换

  字符串的大小写转换需要使用strupr函数和strlwr函数。strupr函数的语法格式为:strupr(字符串),其功能为将字符串中的小写字母变成大写字母,其它字母不变。strlwr函数的语法格式为:strlwr(字符串),其功能是字符串中的大写字母变成小写字母,其它字母不变。

示例代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>



int main()

{

    char text[20], change[20];

    int num;

    int i = 0;



    while (1)

    {

        printf("输入转换大小写方式(1表示大写,2表示小写,0表示退出):\n");

        scanf_s("%d", &num);



        if (num == 1)

        {

            printf("请输入一个字符:\n");    

            scanf_s("%s", &text);    //输入要转换的字符

            strcpy(change, text);    //复制要转换的字符

            _strupr(change);    //字符串转换为大写

            printf("转换成大写字母的字符串为:%s\n", change);

        }

        else if (num == 2)

        {

            printf("输入一个字符串:\n");

            scanf_s("%s", &text);

            strcpy(change, text);

            _strlwr(change);

            printf("转换成小写字母的字符串为:%s\n", change);

        }

        else if (num == 0)

        {

            break;

        }



    }



    return 0;

}

5.获得字符串长度

  使用strlen(字符数组名)可以获得字符串长度(不含字符串结束标志"\0"),函数返回值为字符串的实际长度。

示例代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>

#include <string.h>



int main()

{

    char text[50],connect[50];

    int num;



    printf("输入一个字符串:\n");

    scanf("%s",&text);

    num = strlen(text);

    printf("字符串的长度为:%d\n",num);



    printf("再输入一个字符串:\n");

    scanf("%s",&connect);

    num = strlen(connect);

    printf("字符串的长度为:%d\n",num);



    strcat(text,connect);

    printf("将两个字符串进行连接:%s\n",text);

    num = strlen(text);

    printf("连接后的字符串长度为:%d\n",num);



    return 0;    

}

6.反转输出字符串

  定义两个字符数组,一个表示源字符串,另一个表示反转后的字符串。再源字符串中从第一个字符开始遍历,读取字符数组,在目标字符串中从最后一个字符(结束标记\0除外)倒序遍历字符串,依次将源字符串中的第一个字符数据写如目标字符串的最后一个字符中,将源字符串中的第2个字符数据写如目标字符串的倒数第2个字符中,依此类推。可实现字符串的反转。

示例代码

#include <stdio.h> 



int main()

{

    int i;

    char String[7] = {"mrsoft"};

    char Reverse[7] = {0};

    int size;

    size = sizeof(String);    //计算源字符串长度



    /*循环读取字符*/

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

    {

        Reverse[size - i - 2] = String[i];    //向目标字符串中插入字符 

    } 



    /*输出源字符*/

    printf("输出源字符串:%s\n",String);

    /*输出目标字符串*/

    printf("输出目标字符串:%s\n",Reverse);



    return 0; 

}

7.输出系统日期和时间

示例代码

#include <stdio.h>

#include <time.h>



int main()

{

    int command[4] = {0,1,2,3};

    int num;

    struct tm *sysTime;    

    printf("如需帮助可输入数字0!\n");

    printf("请输入命令符:\n");



    while(1)

    {

        scanf("%d",&num);

    

        /*判断用于输入的字符*/

        if(command[0] == num)

        {

            /*输出帮助信息*/

            printf("输入数字1显示系统日期,输入数字2显示系统时间,输入数字3退出系统!\n");

        }

        else if(command[1] == num)

        {

            time_t nowTime;

            time(&nowTime);    //获取系统日期 

            sysTime = localtime(&nowTime);    //转换为系统日期

            printf("系统日期:%d-%d-%d\n",1900 + sysTime -> tm_year,

                sysTime -> tm_mon + 1,sysTime -> tm_mday);    //输出信息     

        }

        else if(command[2] == num)

        {

            time_t nowTime;

            time(&nowTime);

            sysTime = localtime(&nowTime);

            printf("系统时间:%d:%d:%d\n",sysTime -> tm_hour,

                sysTime -> tm_min,sysTime -> tm_sec);

        }

        else if(command[3] = num)

        {

            return 0;

        }

        printf("请输入命令符:\n");

    } 

    

    return 0;

}

8.字符串的加密和解密

  一个简单的加密和解密算法:对指定的字符串加密后,利用解密函数能够对密文解密,显示明文信息,加密的方式是将字符串中每个字符加上它在字符串中的位置和一个偏移值5。

示例代码

#include <stdio.h>

#include <string.h>



int main()

{

    int result = 1;

    int i;

    int count = 0;

    char Text[128] = {'\0'};    //定义一个明文字符数组 

    char cryptograph[128] = {'\0'};    //定义一个密文数组

    

    while(1)

    {

        if(result == 1)

        {

            printf("请输入要加密的明文:\n");

            scanf("%s",&Text);

            count = strlen(Text);

            

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

            {

                cryptograph[i] = Text[i] + i + 5;

            }

            cryptograph[i] = '\0';

            

            /*输出密文信息*/

            printf("加密后的密文后:%s\n",cryptograph); 

        }

        else if(result == 2)

        {

            count = strlen(Text);

            

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

            {

                Text[i] = cryptograph[i] - i - 5;

            }

            Text[i] = '\0';

            

            /*输出明文信息*/

            printf("解密后的明文是:%s\n",Text);

        }

        else if(result == 3)

        {

            break;

        }

        else

        {

            printf("请输入正确命令符:\n");

        }

        

        /*输出字符串*/

        printf("输入1加密新的明文,输入2对刚加密的密文进行解密,输入3退出系统:\n");

        printf("请输入命令符:\n");

        scanf("%d",&result); 

    }

    

    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值