C语言-字符串处理

简介: C语言-字符串处理

1. 前言

字符串在C语言里使用非常多,因为很多数据处理都是文本,也就是字符串,特别是设备交互、web网页交互返回的几乎都是文本数据。


字符串本身属于字符数组、只不过和字符数组区别是,字符串结尾有’\0’。 字符串因为规定结尾有'\0',在计算长度、拷贝、查找、拼接操作都很方便。


2. 字符串的定义

char buff[]="我是一个字符串";
char a[]="1234567890";
char b[]="abc";
char c[]={'a','b','c','\0'};

在普通的字符数组结尾加一个 \0 就变成了字符串。

3. 处理字符串里字母大小写

将字符串里所有大写字母全部换成小写字母。或者小写字母全部换成大写字母。可以通过形参进行区分。

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(char *str,int flag);
int main()
{
  char buff[100];
  printf("从键盘上输入字符串:");
  scanf("%s",buff);
  printf("源字符串:%s\n",buff);
  func(buff,0);
  printf("大写转换小写:%s\n",buff);
  func(buff,1);
  printf("小写转大写:%s\n",buff);
  return 0;
}
//函数功能: 大写小写转换
//flag=0表示大写转换小写  =1表示小写转大写
void func(char *str,int flag)
{
  int data;
  while(*str!='\0')
  {
    if(flag)
    {
      if(*str>='a'&& *str<='z') //小写
      {
        *str=*str-32;
      }
    }
    else
    {
      if(*str>='A'&& *str<='Z') //小写
      {
        *str=*str+32;
      }
    }
    str++;
  }
}

4. 从键盘上录入2个字符串,判断是否相等

#include <stdio.h>
int main()
{
  char str1[100];
  char str2[100];
  int i=0;
  /*1. 录入数据*/
  printf("输入字符串1:");
  scanf("%s",str1);
  printf("输入字符串2:");
  scanf("%s",str2);
  /*2. 比较字符串*/
  while(str1[i]!='\0'||str2[i]!='\0')
  {
    if(str1[i]!=str2[i])break;
    i++;
  }
  if(str1[i]=='\0'&&str2[i]=='\0')
  {
    printf("字符串相等.\n");
  }
  else
  {
    printf("字符串不相等.\n");
  }
  return 0;
}

5. 从键盘上录入一个字符串,按照小到大的顺序排序

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[100];
  int len=0;
  int i,j;
  int tmp;
  printf("输入要排序的字符串:");
  scanf("%s",str1);
  len=strlen(str1);
  //开始排序
  for(i=0;i<len-1;i++)
  {
    for(j=0;j<len-1-i;j++)
    {
      if(str1[j]>str1[j+1])
      {
        tmp=str1[j];
        str1[j]=str1[j+1];
        str1[j+1]=tmp;
      }
    }
  }
  printf("排序之后的字符串:%s\n",str1);
  return 0;
}

6. 从键盘上输入一个整数:将整数转为字符串输出

比如:int a; scanf(“%d”,&a); 使用字符串形式打印出a的值。

#include <stdio.h>
#include <string.h>
int main()
{
  char str[100];
  char str1[100];
  int data=0;
  int j=0,i=0;
  printf("从键盘上输入整数:");
  scanf("%d",&data);
  // 123 -->'1' '2' '3'
  while(data)
  {
    str[i++]=data%10+'0';
    data=data/10;
  }
  for(j=0;j<i;j++)
  {
    str1[j]=str[i-j-1];
  }
  str1[j]='\0';
  printf("str1=%s\n",str1);
  return 0;
}

7. 从键盘上输入一个字符串,转为整数输出

#include <stdio.h>
#include <string.h>
int main()
{
  //"123"
  char str[100];
  int data=0;
  int i=0;
  printf("从键盘上输入字符串:");
  scanf("%s",str);
  while(str[i]!='\0')
  {
    data*=10;//data=0 data=10 data=120
    data+=str[i]-'0';//data=1 data=12 data=123
    i++;
  }
  printf("data=%d\n",data);
  return 0;
}

8. 字符串删除

从键盘上录入一个字符串,删除字符串里指定的单词,输出结果。

比如:原字符串 ”akjbcds123dfjvbf123fdvbfd123”

删除单词:“123”

输出的结果:”akjbcdsdfjvbffdvbfd”

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[100];
  char str2[100];
  int i=0,j=0;
  int str2_len=0;
  /*1. 录入数据*/
  printf("输入源字符串:");
  scanf("%s",str1);
  printf("输入要删除的字符串:");
  scanf("%s",str2);
  /*2. 计算要删除字符串的长度*/
  str2_len=strlen(str2);
  /*3. 查找字符串*/
  for(i=0;str1[i]!='\0';i++)
  {
    //比较字符串
    for(j=0;str2[j]!='\0';j++)
    {
      if(str1[i+j]!=str2[j])break;
    }
    if(str2[j]=='\0')
    {
      //4. 删除字符串---后面向前面覆盖
      for(j=i;str1[j]!='\0';j++)
      {
        str1[j]=str1[j+str2_len];
      }
      str1[j]='\0';
      i--;
    }
  }
  //5. 输出结果
  printf("str1=%s\n",str1);
  return 0;
}

9. 字符串插入

从键盘上录入一个字符串,从指定位置插入一个字符串,再输出结果。

比如:原字符串“1234567890”

(1). 从指定位置插入新的单词。 比如 从第2个下标插入一个“ABC”字符串。

结果: “123ABC4567890”

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[100];
  char str2[100];
  int addr=0;
  int str1_len;
  int str2_len;
  int i;
  /*1. 录入数据*/
  printf("录入源字符串:");
  scanf("%s",str1);
  printf("录入要插入的字符串:");
  scanf("%s",str2);
  printf("输入要插入的下标位置:");
  scanf("%d",&addr);
  str1_len=strlen(str1); //3
  str2_len=strlen(str2); //2
  /*2. 完成插入*/
  //完成数据移动
  for(i=str1_len-1;i>=addr;i--)
  {
    str1[i+str2_len]=str1[i];
  }
  //数据替换
  for(i=0;i<str2_len;i++)
  {
    str1[i+addr]=str2[i];
  }
  str1[str1_len+str2_len]='\0';
  /*3. 输出数据*/
  printf("str1=%s\n",str1);
  return 0;
}

10. 字符串替换

从键盘上录入一个字符串,将指定单词替换成想要的单词。

比如:原字符串“123jfvfdj123dkfvbfdvdf”

想要将“123”替换成“888”或者“8888”或者“88”

#include <stdio.h>
#include <string.h>
int main()
{
  char str1[100];
  char str2[100];
  char str3[100];
  int str1_len=0;
  int str2_len=0;
  int str3_len=0;
  int i,j;
  int cnt=0;
  /*1.准备数据*/
  printf("输入源字符串:");
  scanf("%s",str1);
  printf("输入查找的字符串:");
  scanf("%s",str2);
  printf("输入替换的字符串:");
  scanf("%s",str3);
  /*2. 计算长度*/
  str1_len=strlen(str1);
  str2_len=strlen(str2);
  str3_len=strlen(str3);
  /*3. 字符串替换*/
  for(i=0;i<str1_len;i++)
  {
    //查找字符串
    for(j=0;j<str2_len;j++)
    {
      if(str1[i+j]!=str2[j])break;
    }
    //如果查找成功就进行替换
    if(j==str2_len)
    {
      //总长度变短了
      if(str2_len>str3_len)
      {
        cnt=str2_len-str3_len; //差值
        //完成数据向前移动--覆盖
        for(j=i+str2_len-cnt;j<str1_len;j++)
        {
          str1[j]=str1[j+cnt];
        }
        str1[str1_len-cnt]='\0';
      }
      //总长度变长了
      else if(str2_len<str3_len)
      {
        cnt=str3_len-str2_len; //差值
        //完成数据向后移动
        for(j=str1_len;j>=i+str2_len;j--)
        {
          str1[j+cnt]=str1[j];
        }
        str1[str1_len+cnt]='\0';
      }
      //替换
      for(j=0;j<str3_len;j++)
      {
        str1[i+j]=str3[j];
      }
      //重新计算长度
      str1_len=strlen(str1);
    }
  }
  /*4. 完成字符串打印*/
  printf("str1=%s\n",str1);
  return 0;
}
目录
相关文章
|
云安全 安全
阿里云服务器25端口解封教程完美解决25端口开通问题
阿里云服务器25端口如何申请解封?默认阿里云25端口是封禁的,一般建议使用465端口代替,但是也可以申请解封25端口,阿小云来详细说下阿里云服务器25端口解封教程
12392 0
 阿里云服务器25端口解封教程完美解决25端口开通问题
|
7月前
|
机器学习/深度学习 人工智能 自然语言处理
Z-Image:冲击体验上限的下一代图像生成模型
通义实验室推出全新文生图模型Z-Image,以6B参数实现“快、稳、轻、准”突破。Turbo版本仅需8步亚秒级生成,支持16GB显存设备,中英双语理解与文字渲染尤为出色,真实感和美学表现媲美国际顶尖模型,被誉为“最值得关注的开源生图模型之一”。
5446 9
|
27天前
|
人工智能 运维 安全
AI 智能巡检:自动规划最优路线与动态补巡的技术变革
AI智能巡检通过算法自动规划全局最优路径,融合空间、业务、人力与环境等多维约束,秒级生成安全高效路线;同时实时识别漏巡点位,动态插入补巡任务,实现全覆盖、零中断。已显著提升作业效率30%+、巡检合规率超98%,广泛应用于电力、化工、市政等领域。(239字)
|
存储 监控 算法
园区导航系统技术架构实现与原理解构
本文聚焦园区导航场景中室内外定位精度不足、车辆调度路径规划低效、数据孤岛难以支撑决策等技术痛点,从架构设计到技术原理,对该系统从定位到数据中台进行技术拆解。
631 0
园区导航系统技术架构实现与原理解构
|
11月前
|
弹性计算 测试技术 网络安全
阿里云38元的轻量应用服务器2核2G200M带宽是什么意思?是不是独享的?
2025年,阿里云轻量应用服务器通用型升级,面向网站建设、开发测试、小型应用等轻量应用场景,推出通用型轻量应用服务器,支持网络默认200Mbps峰值带宽,包含一个IPv4固定公网地址,加量不加价。那么这个200M带宽是什么意思呢?是不是独享的呢?其实,峰值200M就是指带宽上限是200M,并非是固定独享的200M,实际使用时可能达不到200M的意思。不过好在价格确实非常优惠,而且不限制流量。
2585 1
|
开发者 人工智能 自然语言处理
欢迎使用通义灵码
灵码使用指南!一键收藏。
146790 31
|
数据采集 人工智能 自然语言处理
Qwen模型角色扮演最佳实践
角色扮演大模型通过模拟特定角色的行为、语言风格和情感表达,实现高度拟人化和定制化的互动体验。与传统通用模型相比,角色扮演模型在语言风格、性格特征和情绪反应上更加细腻,提供更真实的交互体验。本文介绍了如何通过system prompt、few-shot学习和微调等技术实现大模型的拟人化,包括使用阿里云百炼平台进行角色扮演测试,以及如何通过合成数据和Lora微调提高模型的表演效果。最终,展示了如何通过优化数据质量和训练策略,显著提升角色扮演模型的表现。
|
机器学习/深度学习 数据采集 算法
【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
本文介绍了一个基于Python的时间序列模型,用于分析和预测2021-2022年重庆地区的气温变化趋势,通过ARIMA和LSTM模型的应用,揭示了气温的季节性和趋势性变化,并提供了对未来气温变化的预测,有助于气象预报和相关决策制定。
1479 1
【优秀python算法毕设】基于python时间序列模型分析气温变化趋势的设计与实现
|
监控 数据可视化 测试技术
性能测试:性能测试流程与方法
**性能测试流程与方法概述:** 本文介绍了性能测试的关键步骤,包括现状分析、指标获取、用户场景定义、验收标准设定、测试计划编写、压力环境准备、执行压测、监控、结果分析、报告编写及改进建议。测试方法涉及并发模式(虚拟用户)和RPS模式(吞吐量),确保系统在不同负载下的稳定性和效率。