精华内容
下载资源
问答
  • 如果是使用C语言实现话,可以使用指针,给两个指针,一个标记首部,一个标记尾部,指针进行解引用之后进行交换,这样就可以实现字符串翻转了 char str[] = "abcdefg"; char* beg = str; //beg标记...

    问题:给你一串字符串,翻转此字符串,然后并输出结果
    例如:字符串为"abcdefg",翻转之后的结果为:“gfedcba”

    一、C语言实现

    如果是使用C语言实现的话,可以使用指针,给两个指针,一个标记首部,一个标记尾部,对指针进行解引用之后进行交换,这样就可以实现字符串翻转了

    char str[] = "abcdefg";
    char* beg = str;     //beg标记字符串第一个字符
    char* end = str + strlen(str);   //end标记字符串的最后一个字符
    //beg和end标记的是地址,由于地址是递增的,所以可以进行比较
    while (beg < end) {
     swap(*beg++, *--end);
    }
    

    二、C++实现

    使用数据结构------栈,因为栈的特性是先进后出,所以我们可以把字符串先进行压栈,然后在进行出栈,这样就可以实现翻转字符串啦

    在这里插入图片描述

    char str[] = "abcdefg";
    Stack stack;
    char* p = str;
    //入栈
    while(p) {
     stack.push(*p++);
    }
    int index = 0;
    //出栈
    while(!stack.empty()){
     str[index++] = stack.top();
     stack.pop();
    }
    

    三、python实现
    使用切片操作符[::]来实现
    [::]的特点:

    正数的索引以序列的起始位置作为起点,负数的索引以序列的结束位置作为起点

    例如:[::1]是以序列的起始位置作为起点,输出整个序列,输出的时候间隔为0,就是说输出整个序列,[::-1]是以序列的结束位置作为起点,输出整个序列,也是输出整个序列,[::2]是以序列的起始位置作为起点,输出整个序列,输出的时候是每隔一个元素输出

    切片操作符中两个冒号后面的数字
    (1)数字的大小:
         是表明输出的时候是按什么规则输出的,就比如:
            如果是1,那就输出整个序列
            如果是2,那就是输出的时候每间隔一个元素进行输出
            如果是3,那就是输出的时候每间隔2个元素进行输出
    (2)数字的正负
            只是表明是以序列的起始位置作为起点,还是以序列的结束位置作为起点,正
          数表明是以序列的起始位置作为起点,负数表明是以序列的结束位置作为起点
    

    在这里插入图片描述

    代码实现字符串翻转:

    a = "abcdefg"
    print a[::-1]
    

    在这里插入图片描述
    python的实现简单吧,只需要两行代码就OK啦

    展开全文
  • C语言字符串的引用方式 在C语言程序中,字符串是存放在字符数组中的。 用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。 用字符指针变量指向一...

    C语言字符串的引用方式

    在C语言程序中,字符串是存放在字符数组中的。

    用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。

    用字符指针变量指向一个字符串常量,通过字符指针变量引用字符串常量。

    通过字符数组名或字符指针变量可以输出一个字符串,而对一个数值型数组,是不能企图用数组名输出它的全部元素的。

    C语言字符指针作函数参数

    如果想把一个字符串从一个函数“传递”到另一函数,可以用地址传递的方法,即用字符数组名作参数,也可以用字符指针变量作参数。

    在被调用的函数中可以改变字符串的内容,在主调函数中可以引用改变后的字符串。

    C语言使用字符指针变量和字符数组的比较

    字符数组由若干个元素组成,每个元素中放一个字符,而字符指针变量中存放的是地址(字符串第1个字符的地址),绝不是将字符串放到字符指针变量中。

    赋值方式:可以对字符指针变量赋值,但是不能对数组名赋值。

    初始化的含义:对字符指针变量赋初值。

    存储单元的内容:编译时为字符数组分配若干个存储单元,以存放各元素的值,而对字符指针变量,只分配一个存储单元。

    C语言使用字符指针变量和字符数组注意事项

    指针变量的值是可以改变的,而数组名代表一个固定的值,即数组首元素地址,不能改变。

    字符数组中各元素的值是可以改变的,但字符指针变量指向的字符串常量中的内容时不可以被取代的。

    引用数组元素。对字符数组可以用下标法引用一个数组元素,也可以用地址法。

    用指针变量指向一个格式字符串,可以用它代替printf函数中的格式字符串。

    C语言通过指针引用数组案例

    #include <stdio.h>
    #include <string.h>//为了引入求字符串长度函数 
    int main()
    {
        char str[] = "hello xiaolin";//将字符串放在字符数组中
        char *pstr = str;
        for(int i=0; i<strlen(str); i++)
      {
            printf("%c", *(pstr+i));
        }
        printf("\n");
        return 0;
    }
    

    编译运行结果:

    hello xiaolin
    
    --------------------------------
    Process exited after 3.3 seconds with return value 0
    请按任意键继续. . .
    

    以上,如果你看了觉得对你有所帮助,就给小林点个赞,分享给身边的人叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~

    100道C语言源码案例请去公众号:C语言入门到精通

    展开全文
  • 1.定义指针,给其一个指向,完成对字符串的引用。这里需要注意野指针的存在,要给指针一个指向,或者让其指向NULL,指针需要配合字符数组一起使用。 2.定义字符数组,完成对字符串的引用。 以对字符串比较函数为例...

    由于C语言是最基础的语言,C语言中没有数据类型能够存储字符串,char数据类型仅仅能够存储一个字符的数据,所以对于C语言中字符串的使用,有两种方法

    1.定义指针,给其一个指向,完成对字符串的引用。这里需要注意野指针的存在,要给指针一个指向,或者让其指向NULL,指针需要配合字符数组一起使用。或者,运用动态申请内存的方式。
    2.定义字符数组,完成对字符串的引用。

    以对字符串比较函数为例。

    字符串的使用

    首先第一种方式。

    #include<stdio.h>
    #include<string.h> 
    int main(){
    	char a1[100],b1[100],c1[100]; 
    	//定义一个指针,又定义一个字符数组,此时字符串的存储,在字符数组中本质还是按照字符进行存储,所以字符数组长度要够大,能存下字符串
    	char *a = a1;
    	char *b = b1;
    	char *c = c1;
    	printf("请输入a1:");
    	scanf("%s",a1);//因为a1本身就代表数组的首地址,所以无须加&	
    	printf("\n请输入b1:");   		
    	scanf("%s",b1); 	
    	printf("\n请输入c1:");
    	scanf("%s",c1); 
    	printf("%d,%d,%d",strcmp(a,"23456"),strcmp(b,"Ab1"),strcmp(c,"Mary"));
    		return 0;
    }
    

    运行结果
    因为scanf传得必须是指针,也就是地址。
    比如int a;需要&a;传入a的地址。但是如果是数组,由于数组本身表示的是数组首元素的地址,所以不需要再添加&
    如:
    char a[10];
    scanf("%s",a);
    此时传入的a就是本身就是一个地址,是数组首地址。a = &a[0];
    当然,如果添加了&,原则上也不会出错,也能通过编译
    运行结果

    第二种方式,定义字符数组

    #include<stdio.h>
    #include<string.h> 
    int main(){
    	char a[100];
    	char b[100];
    	char c[100];
    	printf("请输入a:");
    	scanf("%s",a);	
    	printf("\n请输入b:");   		
    	scanf("%s",b);  	
    	printf("\n请输入c:");
    	scanf("%s",c); 
    		printf("比较结果:%d,%d,%d",strcmp(a,"23456"),strcmp(b,"Ab1"),strcmp(c,"Mary"));
    		return 0;
    }
    

    运行结果
    **

    对于这里,需要明白字符在字符数组的存储!

    **

    存储一:单个字符的存储

    char a[10];
    for(int i = 0;i<10;i++)
    scanf("%c",a[i]);//输入qwert12345
    //此时存储的字符为 a[0]='q';a[1]='w';a[2]='e';...a[8]='4';a[9]='5';
    

    对于单个字符的存储,如上述,它只是一个普通的存放十个元素的数组,系统不会为其末尾自动添加’\0’,它只是按照你的输入,将你输入的字符存放至指定位置的数组空间,由于循环进行十次,所以你还必然要输入十个元素

    可以等效为:

    char a[10]={'q','w','e','r','t','1','2','3','4','5'};
    //这也只是一个普通的存放十个元素的数组,不会为其末尾自动添加'\0',访问最大的下标是a[9];
    

    存储二:字符串在字符数组的存储方式:

    char a[20];
    scanf("%s",a);//输入qwert12345
    //此时存储的字符还是按照 a[0]='q';a[1]='w';a[2]='e';...a[8]='4';a[9]='5';进行存储,但是需要注意,由于是用字符串进行存储,也就导致了数组长度需要比字符串长度至少多出一位存储空间,字符串末尾系统会自动为其添加'\0'
    

    *当以如此方法存储时:

    1. char a[]=“qwert12345”;
      或给字符串加上大括号:
    2. char a[]={“qwert12345”};
      上述两种系统会自动在字符串的末尾加上字符串结束符,即 ‘\0’, (只要是双引号引起的字符串,系统会自动在字符串的末尾加上字符串结束符)
      C语言中串的存储看作是一种特殊的一维数组来处理,所以为其添加结束符’\0’
    3. 当用static char a[10]={‘1’,‘2’,‘3’,‘4’,‘5’};
      这种方法定义时,系统会自动从未初始化的元素开始,将之后的元素赋为\0,如上面的数组a中的元素实际上是:‘1’,‘2’,‘3’,‘4’,‘5’,’\0’,’\0’,’\0’,’\0’,’\0’
      这里添加的’\0’只是对数组元素的初始化,和上面系统为其字符串结束添加的’\0’标志不同
    4. char a[10]={‘1’,‘2’,‘3’,‘4’,‘5’};
      a[0] = ‘1’;a[1]=‘2’;…a[4] = ‘5’;由于不是静态数组,a[6]-a[9]的值不确定,系统也不会为其初始化添加’\0’。
    5. 当char a[10]={‘q’,‘w’,‘e’,‘r’,‘t’,‘1’,‘2’,‘3’,‘4’,‘5’};进行存储,系统不会为其自动添加结束符’\0’,只是作为单个字符,单个元素,存进字符数组中相应单元中。*

    对于上述直接输入一条串,C语言的存储也是每个数组元素存储一个字符,C语言不具有存储整条串的能力,不可以将"qwert12345"整条串存入数组一个单元内。
    用C++进行验证如下:
    存储方式的验证
    对于此类情况:
    char a[1];
    a = “qwert12345”;
    是错误的,“qwert12345"是一个字符串常量,而字符串常量代表的是地址值,数组名也是地址常量 ,这样的本质是将地址赋给了地址;更者,由于字符数组长度为1,只有一个存储单元,即使改成
    char a[1];
    scanf(”%s",a);//输入qwert12345
    也是错误的,同上述字符串结束系统自动添加’\0’问题,以及字符串的存储是以每个字符进行存储的,这样的做的结果是导致数组溢出

    可以如下:
    char *a = “qwert12345”;
    这样是将字符串常量的地址赋给指针,即让指针指向该字符串常量。由于是它一个串,所以系统会为此串的末尾加上字符串结束符,即 ‘\0’,

    也可以如下:
    char a[20];
    char *a1 = a;
    scanf("%s",a1); //输入 qwert12345
    这样是定义一个字符数组,又定义一个指针,让指针指向字符数组首地址,每个字符数组其中存放单个字符,输入一条串,串的第一个字符存入数组a1的首地址的位置,串的第二个字符,存入数组下一个地址…还是按照a[0]=‘q’;a[1]=‘w’;a[2]=‘e’;…a[8]=‘4’;a[9]=‘5’;进行存储,末尾添加结束符’0’

    展开全文
  • 说起来很有意思,自认为对C语言理解得还是比较深刻。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人...
  • C语言的字符串分割

    2016-05-30 10:14:00
    说起来很有意思,自认为对C语言理解得还是比较深刻。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人...

    说起来很有意思,自认为对C语言理解得还是比较深刻的。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人又容易出错。感概技术学得不够全面啊!这里引用一段strtok用法:

    The strtok() function returns a pointer to the next "token" in str1, where str2 contains the delimiters that determine the token. strtok() returns NULL if no token is found. In order to convert a string to tokens, the first call to strtok() should have str1 point to the string to be tokenized. All calls after this should have str1 be NULL.

    For example:

    char str[] = "now # is the time for all # good men to come to the # aid of their country";  
       char delims[] = "#";  
       char *result = NULL;  
       result = strtok( str, delims );  
       while( result != NULL ) {  
           printf( "result is \"%s\"\n", result );  
           result = strtok( NULL, delims );  
       }              
    /* 何问起 hovertree.com */
    1. The above code will display the following output:  
    2.   
    3.    result is "now "  
    4.    result is " is the time for all "  
    5.    result is " good men to come to the "  
    6.    result is " aid of their country" 
     这个函数跟编译器中的词法分析很像,在以后的文本处理中,会解决很多问题。看来我有必要系统的学习下C的库函数,而不仅仅是死扎在语法和一些算法技巧上面。这样在平常的工作中才能事半功倍。
    使用这个函数,形如下面的配置文件就非常容易解析:
    id1 value1 value2 value3
    id2 value1 value2 value3
    ...
        使用这个函数,分割字符串就更加方便了,例如下面待分割的字符串:
    12|2345|asld|alsfalskd
            只要读取待处理的数据,然后调用四次strtok就能够解析出每行的值,以前我一般不是自己解析就是用sscanf,但是strtok更加合适,也更加啊灵活!

    推荐:
    http://www.cnblogs.com/roucheng/p/3454292.html

    转载于:https://www.cnblogs.com/roucheng/p/cfenge.html

    展开全文
  • 01字符串的引用方式1、在C程序中,字符串是存放在字符数组中的。2、用字符数组存放一个字符串,可以通过数组名和下标引用字符串中的一个字符,也可以通过数组名和格式声明%s输出该字符串。3、用字符指针变量指向一个...
  • c语言的字符串分割

    2013-05-07 16:22:02
    说起来很有意思,自认为对C语言理解得还是比较深刻。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人...
  • 传实体和字符串传递不存在,只有值传递和引用传递。java中只有基本类型和对象类型,所有基本类型都是值传递,对象类型是引用传递。字符串也是对象类型,是个正儿八经类。小写int,long之类就是基本类型。...
  • 数组数组声明为 数据类型 名称[ constant-size ],并将一个数据类型一个或多个实例分组到一个可寻址位置,constant-size可能是一个表达式,但是该表达式必须求值为常量,例如: #define MAX_SIZE 16 ......
  • C语言如何解析json格式字符串

    万次阅读 2018-06-25 11:22:07
    使用cJSON解析JSON字符串 一、为何选择cJSON 我们在使用JSON格式时,如果只是处理简单的协议,可以依据JSON格式,通过对字符串的操作来进行解析与创建。然而随着协议逐渐复杂起来,经常会遇到一些未考虑周全的地方...
  • 说起来很有意思,自认为对C语言理解得还是比较深刻。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人...
  • 一 前言预处理(或称预编译)是指在...当一个源文件进行编译时,系统将自动引用预处理程序源程序中预处理部分作处理,处理完毕自动进入源程序编译。C语言提供多种预处理功能,主要处理#开始预编译指令,如...
  • ANSI C函数只支持按值传递,而不支持按引用传递,但是通过指针操作可以模拟实现按引用传递,其实是就是传递指针值,函数通过指针指向来修改指针指向地址值:   #include #include void ...
  • C语言里面我们利用字符数组来对字符串进行处理, 在C++里面我们前面说过一种类类型string可以对字符串进行处理, 这里需要引起注意,因为两种机制存在一定区别。 一、字符串 1、字符串字面值  利用左、...
  • 本文主要是C基础编程关于字符数组的初步讲解,后续会深入讲解C高级相关的概念(C大神可先略过)。...本文的主要内容:0字符数组1.0字符数组的定义1.1字符数组的初始化1.2字符数组的引用1.3字符串字符串结束...
  • unsigned long int strtoul(const char *str, char **endptr, int base) 把参数 str 所指向的字符串根据给定的 ... endptr -- 类型为 char* 的对象的引用,其值由函数设置为 str 中数值后的下一个字符。 bas...
  • 而弱类型语言中没有类型的概念,所有变量全都是一个类型(一般都是字符串的),程序在用的时候再根据需要来处理变量。(2)c语言就是典型的强类型语言,c语言中所有的变量都有明确的类型;因为c语言...
  • 从本系列文章开始,我们就使用过字符串对象,但是我们却还没有比较详细...就 是使用Objective-C语言创建了一个字符串对象.Foundation框架使用一个名为NSString类,用于处理字符串对句.正如我们所看 到,在Objecti...
  • 批处理-字符串操作

    2018-08-22 20:59:11
    批处理有着具有非常强大的字符串处理能力,其功能绝不低于C语言里面的字符串函数集。批处理中可实现的字符串处理功能有:截取字符串内容、替换字符串特定字段、合并字符串、扩充字符串等功能。下面这些功能一一...
  • C语言字符切割,strtok

    2018-01-08 13:28:32
    说起来很有意思,自认为对C语言理解得还是比较深刻。但居然到今天才知道有个strtok函数,试用了一下突然感慨以前做了多少重复劳动。每次需要解析配置文件,每次需要分割字符串,居然都是自己去分割字符串,既累人...
  • C语言程序中,字符串是存放在字符数组中 ,可以通过数组名和下标引用字符串一个字符,也可以通过数组名和格式声明“%s”输出该字符串,通过字符指针变量引用字符串常量 C语言对于字符串常量是按字符数组...
  • cJSON解析JSON字符串

    2019-09-03 23:16:33
    我们在使用JSON格式时,如果只是处理简单的协议,可以依据JSON格式,通过对字符串的操作来进行解析与创建。然而随着协议逐渐复杂起来,经常会遇到一些未考虑周全的地方,需要进一步的完善解析方法,此时,使用比较...
  • 于是出现了C语言结构体,这相对于单纯操作基本数据类型方便了许多,但是这还不够方便,人们不但把多个数据项集成在一起,而且还把这些数据项操作结合起来,这样极大提高了代码可重用性,也极大地降低...
  • python中的字符串的操作和c语言就有很大的不同了,...print(str)输出:python is number 1python中字符串的引用和切片操作非常方便,值得一提的是,python中第一个字符的索引是0,最后一个字符的索引是-1:str = 'py

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 480
精华内容 192
关键字:

对字符串的引用c语言

c语言 订阅