精华内容
下载资源
问答
  • 修改字符串c语言
    千次阅读
    2021-05-08 09:47:48
    #include <stdio.h>
    #include <string.h>
    
    char *strpl(char *str, char *old, char *new)
    {
    	char *p = NULL;
    	int len = 0;
    	char newstr[64] = {0};
    
    	p = strstr(str,old);
    	len =  p - str;
    	strncpy(newstr, str, len);
    	strcat(newstr, new);
    	strcat(newstr,p+strlen(old));
    	strcpy(str,newstr);
    
    	return str;
    }
    
    int main()
    {
    	char buf[64] = "xxxxabcyyyy";
    	strpl(buf, "abc","cba");
    	printf("buf=%s\n",buf);
    	
    	return 0;
    }
    
    

    例:xxxxabcyyyy
    原理:1.先找到abc的地址,用现在的地址p减去整个字符串的起始地址,得到xxxx的长度len;
    2.将整个字符串len长度的部分复制到临时内存中newstr,将new拼接到newstr后面
    3.将p后的字符串拼接到newstr后面。
    说明:只支持修改字符串中第一个old,old可以在字符串前中后位置

    更多相关内容
  • C语言–压缩字符串

    2021-01-06 16:05:10
    压缩字符串 给定一组字符,使用原地算法将其压缩。 压缩后的长度必须始终小于或等于原数组长度。 数组的每个元素应该是长度为1 的字符(不是 int 整数类型)。 在完成原地修改输入数组后,返回数组的新长度。 示例1...
  • C语言字符串

    千次阅读 多人点赞 2022-04-15 19:05:27
    字符串字面量是const 的数据(常量),由于 *b 指向这个 const 数据,所以实际上b 是const char * b ,但是由于历史的原因,编译器接受不带 const 的写法,这意味这不能用 b 改变它指向的数据,但是仍然可以改变 b ...


    字符串

        c 语言没有专门用于存储字符串的变量类型,字符串都被存储在 char 类型的数组中。数组由连续的存储单元组成,字符串中的字符被存储在相邻的存储单元中,每个单元存储一个字符,c 语言用数组末尾的字符 \o 标记字符串的结束。

          c 中的字符串一定是以空字符结束,这意味着数组的容量必须至少比待存储字符串的字符数多 1,以上图中有14个存储单元,却只能存储13个字符,剩下一个字节留给空字符。      

    字符串常量

         用双引号括起来的内容称为字符串的字面量,也叫做字符串常量。双引号中的字符和编译器自动加入末尾的 \0 字符,都作为字符串存储在内存中,如:” hello world ! ” 、” good morning “ 、 “ i am a student ” 都是字符串字面量。另外注意一点,你的字符串字面量之间如果没有间隔,或用空白字符分隔,c 会自动将它们串联起来。

    #include<stdio.h>
    int main(void)
    {
    	char a[]="hello ""world "   "!";
    	char b[]="hello world !";
    
    	printf("a[]=%s     b[]=%s\n",a,b);
    	
    	return 0;
    	
    }
    
    

    它们的输出是相同的:

    字符串变量

    我们字符串变量一般有两种方法创建,指针或者是数组

    #include<stdio.h>
    int main(void)
    {
    	char a[]="hello world !";   //数组
    	char* b=" hello world !";   //指针
    	
    }

        数组形式( a [ ] )在计算机的内存中分配为一个内含14个元素的数组,每个元素初始化为字符串字面量对应的字符。通常,字符串都作为可执行文件的一部分存储在数据段中。当把程序载入内存时,也载入了程序中的字符串。字符串存储在静态存储区中,但是,程序在开始运行时才会为该数组分配内存。此时才将字符串拷贝到数组中,此时字符串有两份,一个是在静态内存中的字符串字面量,另一个是存储在 a[ ] 数组中的字符串。

    文字有点晦涩,我们结合图看看  

     指针形式( *b )也使得编译器为字符串在静态存储区预留14个元素的空间。一旦开始执行程序,它会把字符串地址存储在指针变量中。该变量指向该字符串的首字符。 

    其实不用关心太多,你只要知道,初始化数组把静态存储区的字符串拷贝到数组中,你的数组得到的只是它的副本,而初始化指针只把字符串的地址拷贝给指针,你得的是静态存储区字符串的地址。

    数组和指针的选择:

         那么我们用数组还是用指针呢?它们一个存着地址一个存着副本,所以肯定是有差别的对吧,我们精简的了解一下,因为书上真的很复杂写了一大堆的例子,我们提取一下精华:

         字符串字面量是 const 的数据(常量),由于 *b 指向这个 const 数据,所以实际上 b 是 const  char * b ,但是由于历史的原因,编译器接受不带 const 的写法,这意味这不能用 b 改变它指向的数据,但是仍然可以改变 b 的值,就是让 b 指向别的位置。如果把一个字符串字面量拷贝给一个数组,就可以随意改变数据,除非把数组声明为 const,数组元素是变量,但是数组名不是变量。

    #include<stdio.h>
    int main(void)
    {
    	char a[]="hello world !";  //数组
    	a[0]='H';
    	printf("a[]=%s\n",a);
    	
    	char* b="hello world !";   //指针
    	b[0]='H';   
    	printf("*s=%s\n",b);
    	
    	return 0;
    	
    }
    
    

             

    我用的是 Dev -C++ ,在我电脑上编译它过了,但是这个指针形式并没有输出,这就很好的证明了上面说的对吧,你用指针你不能修改字符串字面量(字符串常量),因为你的指针是 const char *,所以你可以在把指针初始化为字符串字面量时使用 const 限定符:const char * b,书上推荐我们这样用,这也是比较安全的做法,看见 const 我们就知道不能去修改它。总之,初始化数组把静态存储区的字符串拷贝到数组中,而初始化指针只把字符串的地址拷贝给指针,如何选择取决于你想用程序做什么,如果你要去构造一个字符串→数组,如果你要处理一个字符串→指针。

    补充

           再说一下指针,就是当你用多个指针初始化的字符串字面量是一样的,它们得到的是同一个地址,编译器可以使用内存中的一个副本表示所以完全相同的字符串字面量。

    #include<stdio.h>
    int main(void)
    {
    	char* a="hello world !"; 
    	char* b="hello world !"; 
    	char* c="hello world !"; 
    	
    	printf("a= %p\n",a);
    	printf("b= %p\n",b);
    	printf("c= %p\n",a);
    	
    	return 0;
    	
    }
    
    

    你看它们的地址是不是一模一样

     所以你有没有懂懂一点点这个(你初始化指针是 const ),如果允许你修改的话:

        char* a="hello world !"; 
        char* b="hello world !"; 
        char* c="hello world !"; 
        
        printf("a= %p\n",a);
        a[0]='y';               
        printf("b= %p\n",b);
        printf("c= %p\n",a);

    那后面两个输出都变成“ yello world ”,如果编译器使用这种单次副本表示法,并允许 a[ 0 ] 修改 ‘ h ’,那将影响所有使用该字符串的代码。而把数组初始化为字符串字面量却不会导致类似问题,因为数组获得的原始字符串的副本。总之,如果你打算修改字符串,就不要用指针去初始化
        

    展开全文
  • C语言 char 字符串 - C语言零基础入门教程

    千次阅读 多人点赞 2021-08-09 09:32:34
    一.char 字符串简介 二.字符和字符串区别 1.取值范围相同 2.字符串由多个字符构成 3.字符串和字符使用 printf 函数 三.char 字符串遍历 四.猜你喜欢 零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C ...

    目录

    零基础 C/C++ 学习路线推荐 : C/C++ 学习目录 >> C 语言基础入门

    一.char 字符串简介

    C 语言中,除了前面介绍的int 整型、float / double 浮点数、bool….等等,char 字符串也是一种非常重要的数据类型;

    字符串:一般用一对双引号””括起的一串字符来表示字符串常量,字符串默认以转义字符 \0 结尾,字符串常量是不可被修改的,如:

    "Hello!"、"\aWarning!\a"、"123abc\n"、""
    

    二.字符和字符串区别

    1.取值范围相同

    字符分类两类,一种是无符号字符 unsignedchar,一种是有符号的字符 char ,他们取值范围不同:

    无符号字符unsigned char取值范围:0~255
    有符号字符char取值范围:-128~127
    

    2.字符串由多个字符构成

    字符串和字符都可以使用 char 表示,注意使用的区别:

    //字符串
    char* p = "123"; //字符串使用双引号
    //字符
    char  p = '1';//字符使用单引号
    char  p = '2';//字符使用单引号
    char  p = '3';//字符使用单引号
    

    3.字符串和字符使用 printf 函数

    字符串和字符需要使用不同的占位符:字符串使用 %s 作为占位符,字符使用 %c 作为占位符;

    printf("%c ", 'A');
    printf("%s ", "A");
    

    虽然同样都是 printf 函数输出 A ,但是 “A” 是表示字符串,’A’ 是表示单个字符;

    三.char 字符串遍历

    在上面已经介绍了**字符串是有多个字符构成,默认以转义字符\0结尾;**前面的 for 循环while 循环也学完了,我们可以通过循环配合 break 来遍历字符串中的每一个字符,如:

    /******************************************************************************************/
    //@Author:猿说编程
    //@Blog(个人博客地址): www.codersrc.com
    //@File:C语言教程 - C语言 char 字符串
    //@Time:2021/06/01 08:00
    //@Motto:不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
    /******************************************************************************************/
    
    #include "stdafx.h"
    #include<stdlib.h>
    #include<stdio.h>
    void main()
    {
        char* p = "www.codersrc.com";
        printf("字符串p:%s\n", p);
        while (1)
        {
            if (*p == '\0') // '\0'表示字符串结尾,跳出循环
                break;
            printf("%c ", *p);//当前的字符
            p++;//字符串地址偏移+1
        }
        system("pause");
    }
    /*
    输出:
    
    字符串p:www.codersrc.com
    w w w . c o d e r s r c . c o m
    请按任意键继续. . .
    */
    

    四.猜你喜欢

    1. 安装 Visual Studio
    2. 安装 Visual Studio 插件 Visual Assist
    3. Visual Studio 2008 卸载
    4. Visual Studio 2003/2015 卸载
    5. 设置 Visual Studio 字体/背景/行号
    6. C 语言格式控制符/占位符
    7. C 语言逻辑运算符
    8. C 语言三目运算符
    9. C 语言逗号表达式
    10. C 语言自加自减运算符(++i / i++)
    11. C 语言 for 循环
    12. C 语言 break 和 continue
    13. C 语言 while 循环
    14. C 语言 do while 和 while 循环
    15. C 语言 switch 语句
    16. C 语言 goto 语句
    17. C 语言 char 字符串

    未经允许不得转载:猿说编程 » C 语言 char 字符串

    展开全文
  • C语言字符串内容的修改

    万次阅读 多人点赞 2020-05-01 14:33:52
    1)如何修改字符串的内容 2)char str[] = "We are happy."; 和 char* sp = "We are happy."; 创建的字符串有什么不同 例1: 定义一个字符串,然后修改其最后的标点符号为 ”!“,打印字符串的内容和字符串地址: #...

    关于:

    1)如何修改字符串的内容
    2)char str[] = "We are happy.";char* sp = "We are happy."; 创建的字符串有什么不同

    例1: 定义一个字符串,然后修改其最后的标点符号为 ”!“,打印字符串的内容和字符串地址:

    # include <stdio.h>
    
    int main()
    {
    	char str[] = "We are happy.";
    	printf("%p \n", str);   // 00BBF900
    	
    	str[12] = '!';
    	printf("%s \n", str);   // We are happy!
    	printf("%p \n", str);   // 00BBF900
    	
        return 0;
    }
    
    >>>
    00BBF900
    We are happy!
    00BBF900
    

    可见这样定义的字符串是可以直接在本体上修改其内容的,因为修改前后地址并没有变化。

    例2: 定义一个指针指向字符串常量,然后尝试修改字符串的标点符号:

    # include <stdio.h>
    
    int main()
    {
    	char* sp = "We are happy.";
    	sp[12] = '!';
    	printf("%s \n", *sp);
    	printf("%p \n", sp);
    	
        return 0;
    }
    

    报错:写入访问权限冲突
    在这里插入图片描述
    先说结论:

    • char* sp = "We are happy." 无法修改字符串内容,因为这个字符串存放在内存的常量区
    • char str[] = "We are happy."可以修改字符串内容,因为这个字符串是存放在栈中的

    解释:

    当执行语句 char* sp = "We are happy." 时,计算机操作步骤:

    1)程序加载字符串值,并存放到常量存储区,常量存储器的内容是只读的;
    2)程序在栈上创建 sp 变量;
    3)sp 变量设置为 "We are happy." 的地址;
    3)若程序试图修改 sp 变量所指向的字符串内容就会报错,因为字符串在常量存储器,是只读的。

    当执行语句 char str[] = "We are happy." 时,计算机操作步骤:

    1)程序加载字符串值,并存放到常量存储区,常量存储器的内容是只读的;
    2)程序在栈上初始化一个数组(分配空间),并自动保证该数组足够大以容纳字符串;
    3)程序将字符串的内容复制到栈的数组内。

    这两者的区别就在于: 定义指针的方法仅仅是 让指针指向了常量存储器中的字符串,而定义数组的方法是 得到了常量存储器中字符串的副本,所以定义数组的方法才可以修改字符串。

    关于 C 语言中存储器的类型:

    参考文章:C语言:存储器的类型

    对用定义指针指向字符串的方法,补充一下指针 sp 里存的是字符串的地址,而字符串本体只有一个,就是常量区的字符串。

    # include <stdio.h>
    
    int main()
    {
    	char* sp = "We are happy.";
    	
    	printf("%s \n", sp);   // We are happy. 字符串本体
    	printf("%p \n", sp);   // 0097EDBC  字符串的地址
    	printf("&sp: %p\n", &sp);  // &sp: 00CFF744   指针的地址
    	printf("*&sp: %s\n", *&sp); // *&sp: We are happy.  先取得指针的地址,然后取该地址下的指针变量所指向的值
    	
    	return 0;
    }
    >>>
    We are happy.
    0097EDBC
    &sp: 00CFF744
    *&sp: We are happy.
    

    参考文章:
    [1] C语言字符串的值是否可以被修改
    [2] C语言:存储器的类型

    展开全文
  • 题目:字符串替换,三个参数字符串A、B、C,用字符串C来替换在字符串A中的B 首先,我们先来分析一下题目中所要实现的程序的功能:我们要获取三个字符串,A是原始的字符串,B是要查找的内容,C是给定的要替换的字符串...
  • C语言字符串创建

    2022-07-06 09:36:55
    C语言两种创建字符串的方式
  • C语言 字符串分割

    千次阅读 2020-07-02 12:45:00
    C语言 字符串分割 一、简述 记--字符串分割,strtok()函数的使用例子、自己实现split()函数。 二、例子代码 #include <stdio.h> #include <string.h> /* * 函数:split * 描述:按指定分隔符...
  • C语言替换字符串中的字符

    千次阅读 2022-04-19 14:19:24
    描述:项目中需要计算数学表达式的值,数学表达式是以字符串的形式存在,需要将表达式中的字符替换成浮点型数据;比如表达式是:(A+B+C)*2+D,其中字符A、B、C、D都是12.345;代码实现如下: #include <iostream...
  • c语言编程替换文件中字符串

    千次阅读 2021-05-20 19:35:49
    /* Filename: word-replace.c* Description: 替换文件中指定的单词为其他字符串并输出到指定的文件中*/#include#include#include#include#define MAX_WORDS_LEN 50 // 单词的最大长度限制typedef e...
  • C语言字符串排序

    千次阅读 2021-11-18 16:27:22
    文章目录前言(一)需要的相关知识(二)代码实现(1)指针数组指向的字符串常量(2)使用二维数组存放字符串 前言 在理解二维数组和数组...字符串常量存放在.rodata段,属于只读数据区,只能读取,不能修改,所以交换
  • C语言字符串拼接和追加.doc

    千次阅读 2021-05-19 12:33:31
    C语言字符串拼接和追加.doc下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。2.下载的文档,不会出现我们的网址水印。3、该文档所得收入(下载+内容...
  •   字符串在程序中很常见,和整数、小数、字符其他数据类型一样,是代码中必不可少的一部分。可是字符串却又和其他类型不完全一样,还有自己的个性。   下面直接通过一段代码来看。 定义了一个字符1.一个字符串1...
  • C语言关于字符串和字符数组的转化问题

    千次阅读 多人点赞 2020-11-21 11:33:36
    C语言关于字符串和字符数组的转化问题 小菜鸡CS本科生一枚,第一次写博客,如果有什么写的不对或者不好的欢迎大家批评指正, 写这篇博客的原因是我今天遇到的一道题,题目很简单,leetcode中等难度,可是这道题却...
  • C语言数组之字符串

    万次阅读 多人点赞 2018-11-20 01:55:35
    最近各大工作室都发布了一些与字符串有关的题目,同学们在写有关字符串的题目时候会感到吃力,或是无从下手,没有思路,或是一些基本的知识不明白。这里我就讲解下与字符串有关的基本知识 字符串,它是由多个字符...
  • C语言替换字符串

    2021-05-22 07:51:48
    #include #include #include /**** @author: cnscn@163.com* @reference: lovesnow1314@http://community.csdn.net/Expert/TopicView3.asp?id=5198221** 用新子串newstr替换源字符串src中的前len个字符内所包含的...
  • c语言如何截取字符串

    千次阅读 2021-05-19 09:45:09
    ** substring.C -- 截取字符串 */#include "stdio.h"#include "conio.h"/*从左边开始截取字符串 */char *left(char *dst,char *src,int n,int m){char *p=src;char *q=dst;int len=strlen(src);if(n>len) n=len;...
  • C语言字符串的赋值

    千次阅读 2021-05-19 08:07:00
    1、定义的时候直接用字符串赋值char a[10]="hello";注意:不能先定义再给它赋值,如char a[10];a[10]="hello";这样是错误的!2、对数组中字符逐个赋值char a[10]={'h','e','l','l','o'};3、利用strcpychar a[10]; ...
  • 字符与字符串库函数
  • 在对 C 语言的编程实践中,字符串查找是最频繁的字符串操作之一,本节就对常用的字符串查找函数做一个简单的总结。使用 strchr 与 strrchr 函数查找单个字符如果需要对字符串中的单个字符进行查找,那么应该使用 ...
  • C语言———字符与字符串

    千次阅读 多人点赞 2022-03-20 09:03:34
    闲暇时学习字符串,了解更多知识,内含字符串函数+模拟实现+图文解释,帮助更好的理解
  • C语言字符串的处理方式

    千次阅读 2021-05-19 07:54:35
    C语言字符串的处理方式》由会员分享,可在线阅读,更多相关《C语言字符串的处理方式(4页珍藏版)》请在人人文库网上搜索。1、C语言字符串的处理方式“很难从字符串中找到感觉,但它们却是我们能指望的唯一...
  • C语言实现分割字符串

    2021-05-19 08:16:13
    背景遇到一个将字符串分割场景.以前从没有用c语言实现,都是使用python的split()函数,python处理起来很简单.split()方法语法:str.split(str="", num=string.count(str)).• str -- 分隔符,默认为所有的空字符,包括...
  • C语言中使用字符串有两种方式,用char型指针、用char型数组。他们有什么区别和联系? 且听我一一道来。 C语言表示字符串的两种方式,look:char *s1 = "abcde"; // s1 是指针char s2[] = "uvxyz"; // s2 是数组首先...
  • 前言C语言返回字符串函数共有四种方式,分别如下:使用堆空间,返回申请的堆地址,注意释放函数参数传递指针,返回该指针返回函数内定义的静态变量(共享)返回全局变量下面来看看详细的介绍其实就是要返回一个有效的...
  • 最近在写代码的时候,因为工作需要从一个较长的字符串中提取出一小段字符串,然后将新字符串填到提取出来字符串的位置,就像这样子,将str1中的yyyyy提取出来然后将str2填到str1中变成str3。 str1 = ...
  • C语言文件中字符串的查找与替换?

    千次阅读 2021-05-19 14:37:29
    C语言文件中字符串的查找与替换?#include#include#include#includeint Count=0;int findNum(char *str){int i=0,t1=0;FILE *p;char ch;if((p=fopen("image.gl","rb"))==NULL){printf("\n打开文件失败\n");exit(4);}...
  • C语言字符串比较

    万次阅读 多人点赞 2020-11-02 13:18:19
    在单片机串口实现字符串命令解析这篇文章中分析了在串口通信中如何去解析字符串命令,这篇文章就来讨论下字符串比较的方法都有哪些? 说起比较运算,肯定第一时间想到了C语言中关于比较的相关运算符 “>、<...
  • C语言数组字符串合成

    千次阅读 2021-05-19 08:36:41
    满意答案//将两个字符串合成一个字符串,在括号中填入适当的语句,编译 运行出正确的结果。#include #includevoid main(){char s1[20],s2[30],s3[50];int i,j,lengths1,lengths2;printf("string1:");gets(s1);printf...
  • C语言对RSA的简单实现,通过对指定字符串进行加密解密来验证程序的正确性。直接修改程序的内部宏定义实现自己的需求。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 176,269
精华内容 70,507
关键字:

修改字符串c语言