精华内容
下载资源
问答
  • C语言字符串的存储和运算
    千次阅读
    2021-05-19 08:35:29

    字符串是程序设计中一个重要的数据结构(在经典的数据结构教材中,字符串是作为一章来独立讲解的,从这里也能看出字符串是程序设计中的一个重要的数据结构),然而C语言中竟然没有专门的字符串变量。C中如何来处理这种重要的数据结构呢?

    在C程序中,可以用两种方法实现一个字符串的存储和运算:字符数组和字符指针。1.符串的表现形式

    在C程序中,可以用两种方法实现一个字符串。

    1.用字符数组实现。

    void

    main(void)

    {

    static char string

    [ ] = "I Love China!";

    printf("%s\n",string);

    }

    运行时输出:I Love

    China!

    和前面介绍的数组属性一样,string是数组名,它代表字符数组的首地址,(见图1)。string[4]代表数组中序号为4的元素(v),实际上string[4]就是*(string+4),string+4是指向字符“v”指针。

    图1

    2.用字符指针实现。

    可以不定义字符数组,而定义一个字符指针。用字符指针指向字符串中的字符。

    void

    main(void)

    {

    char *string = "I

    Love China!";

    printf("%s\n",string);

    }

    在这里没有定义字符数组,但C语言对字符串常量是按字符数组处理的,实际上在内存开辟了一个字符数组用来存放字符串数组。在程序中定义了一个字符指针变量string。并把字符串首地址(即存放字符串的字符数组的首地址)赋给它(见图2)。

    图2

    有人认为string是一个字符串变量,以为定义时把"I Love

    China!"赋给该字符串变量,这是不确切的。定义string的部分:

    char *string =

    "I Love China!";

    等价于下面两行:

    char

    *string;

    string = "I

    Love China!";

    可以看到:string被定义为一个指针变量,它指向字符型数据,请注意只能指向一个字符变量或其它字符类型数据,不能同时指向多个字符数据,更不是把"I Love

    China!"这些字符存放到string中。只是把"I Love

    China!"的首地址赋给指针变量string(不是把字符串赋给*string)。因此不要认为上述定义行等价于:

    char

    *string;

    *string = "I Love

    China!";

    在输出时,用

    printf("%s\n",string);

    %s表示输出一个字符串,给出字符指针变量名string,则系统先输出它所指向的一个字符数据,然后自动使string加1,使之指向下一个字符,然后再输出一个字符,……,如此直到遇到字符串结束标志‘\0’为止(‘\0’的ASCII码为0,ASCII码为0的字符是“空操作字符”,即它不引起任何控制操作,也不是一个可显示的字符)。注意,在内存中,字符串的最后被自动加了一个‘\0’(如图8.18所示),因此在输出时能确定字符串的终止位置。

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

    int

    i[10];

    printf("%d\n",i);

    是不行的,只能逐个元素输出。显然,可以把字符串看作为一个整体来处理,可以对一个字符串进行整体的输入输出。

    2.字符串指针作函数参数

    将一个字符串从一个函数传递到另一个函数,可以用地址传递的办法,即用字符数组名作参数或用指向字符串的指针作参数。在被调用的函数中可以改变字符串的内容,在主调函数中可以得到改变了的字符串。

    3.字符指针变量与字符数组

    虽然用字符数组和字符指针变量都能实现字符串的存储和运算,但它们二者之间是有区别的,不应混为一谈,主要有以下几点:

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

    (2)赋初值的方式。对数组赋初值要用static存储类别,如

    static str[ ]={

    "I love China! ");

    而对字符指针变量不必加static存储类型,如

    char *a = "I

    love China! ";

    这是因为并没有对数组初始化,只是对指针变量初始化。

    (3)赋值方式。对字符数组只能对各个元素赋值,不能用以下办法对字符数组赋值。

    char

    str[14];

    str = "I love

    China! ";//错误

    而对字符指针变量,可以采用下面方法赋值:

    char

    *a;

    a = "I love

    China! ";

    但注意赋给a的不是字符,而是字符串的首地址。

    更多相关内容
  • C语言指针算术运算

    2021-05-19 08:58:19
    C语言指针中保存一个值的地址,所以可以对指针变量进行算术运算。 C语言中的指针可以进行以下算术运算:递增递减加法减法比较1.递增指针在数组中使用递增指针是因为它是连续的内存位置。此外,经过计算我们可以...

    在C语言指针中保存一个值的地址,所以可以对指针变量进行算术运算。 C语言中的指针可以进行以下算术运算:

    递增

    递减

    加法

    减法

    比较

    1.递增指针

    在数组中使用递增指针是因为它是连续的内存位置。此外,经过计算我们可以知道下一个位置的值。

    递增操作取决于指针变量的数据类型。递增指针的公式如下:

    new_address= current_address + i * size_of(data type)

    32位

    对于32位int变量,它将增加到2个字节。

    64位

    对于64位int变量,它将增加到4个字节。

    下面来看看看在64位操作系统上增加指针变量的例子。创建一个源文件:increment-pointer.c,其代码如下 -

    #include

    void main() {

    int number = 50;

    int *p;//pointer to int

    p = &number;//stores the address of number variable

    printf("Address of p variable is %u \n", p);

    p = p + 1;

    printf("After increment: Address of p variable is %u \n", p);

    }

    执行上面示例代码,得到以下结果 -

    Address of p variable is 17824724

    After increment: Address of p variable is 17824728

    2.指针递减

    与指针递增一样,我们可以递减一个指针变量。递减指针的公式如下:

    32位

    对于32位int变量,它将递减2个字节。

    64位

    对于64位int变量,它将递减4个字节。

    我们来看看在64位操作系统上递减指针变量的例子。创建一个源文件:decrement-pointer.c,其代码如下 -

    #include

    void main() {

    int number = 50;

    int *p;//pointer to int

    p = &number;//stores the address of number variable

    printf("Address of p variable is %u \n", p);

    p = p - 1;

    printf("After decrement: Address of p variable is %u \n", p);

    }

    执行上面示例代码,得到以下结果 -

    Address of p variable is 18218432

    After decrement: Address of p variable is 18218428

    3.指针相加

    我们可以在指针变量上相加一个值。指针相加值的公式如下:

    new_address= current_address + (number * size_of(data type))

    32位

    对于32位int变量,它将相加上2 * number的值。

    64位

    对于64位int变量,它将增加4 * number的值。

    下面来看看看在64位操作系统上相加一个值到指针变量的例子。创建一个源文件:addition-pointer.c,其代码如下 -

    #include

    void main() {

    int number = 50;

    int *p;//pointer to int

    p = &number;//stores the address of number variable

    printf("Address of p variable is %u \n", p);

    p = p + 3; //adding 3 to pointer variable

    printf("After adding 3: Address of p variable is %u \n", p);

    }

    执行上面示例代码,得到以下结果 -

    Address of p variable is 11926728

    After adding 3: Address of p variable is 11926740

    正如你所看到的,p的地址是11926728,但是在添加了3与p变量之后,它是11926740,即4 * 3 = 12增量。由于我们使用64位操作系统,所以它会相加12,但是如果使用32位操作系统,它会相加6,即2 * 3 = 6。这是由于整数值占用32位操作系统中的2字节内存。

    4.指针减法

    类似于指针加法,我们可以从指针变量中减去一个值。下面给出了从指针变量中减去指定值的公式:

    new_address= current_address - (number * size_of(data type))

    32位

    对于32位int变量,它将减去2 * number的值。

    64位

    对于 64位int变量,它将减去4 * number的值。

    我们来看一下64位操作系统从指针变量减去指定值的例子。

    创建一个源文件:subtraction-pointer.c,其代码如下 -

    #include

    void main() {

    int number = 50;

    int *p;//pointer to int

    p = &number;//stores the address of number variable

    printf("Address of p variable is %u \n", p);

    p = p - 3; //subtracting 3 from pointer variable

    printf("After subtracting 3: Address of p variable is %u \n", p);

    }

    执行上面示例代码,得到以下结果 -

    Address of p variable is 17825120

    After subtracting 3: Address of p variable is 17825108

    从指针变量中减去3后,可以看到比前一个地址值小12,即:(4 * 3)。

    ¥ 我要打赏

    纠错/补充

    收藏

    加QQ群啦,易百教程官方技术学习群

    注意:建议每个人选自己的技术方向加群,同一个QQ最多限加 3 个群。

    展开全文
  • C语言 指针操作练习

    2021-05-21 09:05:09
    /**题目:* 将一字符串用数组输出:* 要求如下:* 1、字符串str=“ls -wl -jsj lst dwoc sllj –woih “;字符串中的空格是无规律的,有可能一个空格,也有可能两三个空格。** 2、将字符串输出到数组arr[0]----arr[9]...

    /*

    *  题目:

    *   将一字符串用数组输出:

    *   要求如下:

    *   1、字符串str=“ls  -wl  -jsj  lst  dwoc  sllj –woih  “;字符串中的空格是无规律的,有可能一个空格,也有可能两三个空格。

    *

    *   2、将字符串输出到数组arr[0]----arr[9]中,要求从ls后面开始输出,arr[0]=-wl,

    *   arr[1]=-jsj;

    *   arr[2]=lst;一直输到arr[9],字符串不够的话,用NULL

    *

    *   运行环境: turboc 2.0

    *   日期: 2008 - 5 - 24

    *   coder: sparkvivid

    */

    #include "stdio.h"

    main()

    {

    int i,j=0,k;

    char str[]="ls  -wl  -jsj  lst  dwoc  sllj  -woih  ";

    char * arr[10];/*定义字符指针数组,用来保存字符串地址*/

    char * p;

    /*初始化字符指针数组为全空*/

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

    {

    arr[i] = NULL ;

    }

    /*

    将"-wl"的地址用arr[0]保存,

    将"-jsj"的地址用arr[1]保存,

    将"lst"的地址用arr[2]保存,

    将"dwoc"的地址用arr[3]保存,

    将"sllj"的地址用arr[4]保存,

    将"-woih"的地址用arr[5]保存,

    */

    for( i=2 ; str[i]!='/0' ; i++)

    {

    if(str[i] != ' ')

    {

    arr[j] = &str[i] ;

    j++ ;

    for(k=i ;str[k] != ' ' ;k++)

    {

    }

    i = k;

    }

    }

    /*如果arr[i]不为空,则输出arr[i]中保存的字符串*/

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

    {

    if( arr[i] != NULL )

    {

    p = arr[i] ; /*当前字符传地址赋给p*/

    /*如果当前指针p不指向空格,则输出当前p指向的字符,如果p指向空格,则跳出while循环*/

    while(*p != ' ')

    {

    printf("%c",*p);

    p++ ; /*指针p往后移动一个字符*/

    }

    printf("/n");

    }

    }

    }

    运行结果 :

    33d4b400dff33e732c075f45100786bf.png

    展开全文
  • Leetcode415. 字符串相加C语言

    千次阅读 2020-03-03 12:34:48
    字符串相加C语言) 算法-数学(字符串加减):算法与数据结构参考 题目: 给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。其中: num1 和num2 的长度都小于 5100. num1 和num2 都只包含数字 0-9. num...

    Leetcode415. 字符串相加(C语言)

    算法-数学(字符串加减):算法与数据结构参考

    题目:
    给定两个字符串形式的非负整数 num1 和num2 ,计算它们的和。其中:
    num1 和num2 的长度都小于 5100.
    num1 和num2 都只包含数字 0-9.
    num1 和num2 都不包含任何前导零。
    你不能使用任何內建 BigInteger 库, 也不能直接将输入的字符串转换为整数形式。
    输入:“120” “203”
    输出:“323”

    思路:
    双指针遍历,i、j分别指向两个数组尾部。
    注意两字符串长度,进位,char与int间转换以及输出时顺序

    代码:

    char add(char ch1,char ch2,int *carry){
        int sum = (ch1-'0') + (ch2-'0') + *carry;   	//char-'0'转换成int
        char ret=sum%10+'0';
        *carry=sum/10;
        return ret;
    }
    char * addStrings(char * num1, char * num2){
        int lena=strlen(num1),lenb=strlen(num2);
        int len=(lena>lenb?lena:lenb)+1;				//+1防进位
        int carry=0,i,j,k;
        char* ret=(char*)calloc(len+1,sizeof(char));    //malloc报错
        
        for(i=lena-1,j=lenb-1,k=0;i>=0&&j>=0;i--,j--)	//由于先从高位遍历,故从最后一个加
            ret[k++]=add(num1[i],num2[j],&carry);
            
        while(i>=0){   									//长度不等时的处理
            ret[k++]=add(num1[i],'0',&carry);
            i--;
        }
        while(j>=0){   
            ret[k++]=add('0',num2[j],&carry);
            j--;
        }
        
        if(carry)   ret[k++]=carry+'0';					//有进位
        
        for(i=0,j=k-1;i<j;i++,j--){						//倒序
            char tmp=ret[i];
            ret[i]=ret[j];
            ret[j]=tmp;
        }
        
        return ret;
    }
    
    展开全文
  • C语言字符串指针

    2021-05-20 19:08:51
    ---字符串1.字符串"jack" == 'j' + 'a' + 'c' + 'k' + '\0' 用数组保存字符串char name[10] = "jack";printf(name);2.字符串的一些定义都是字符串(\0的ASCII码值是0)char name[8] = "it";char name2[8] = {'i','t','...
  • 面试题1:使用库函数将数字转换为字符串 出现频率:*** 面试题2:不使用库函数将整数转换成字符串 出现频率:***** 面试题3:使用库函数将字符串转换为数字 出现频率:**** 面试题4:不使用库函数将字符串转换为...
  • 大数相加c语言实现

    2021-05-19 08:06:56
    c语言中int类型是有一定的范围的,例如在32位的情况下可以表示的最大整数是2^31 – 1 =2147483647 。如果想要进行更多位数的整数加法,可以用数组,分别对每个位进行计算。合法数字检查输入的时候应检查输入的是否是...
  • 设计一个函数指针,完成字符串相加并返回相加字符串的地址 方式一(不推荐,总是会忘记free掉内存): #include<stdio.h> #include<stdlib.h> #include<string.h> char * catstr(char * s1,...
  • 今天在看前辈的代码,对其中字符串复制有时候直接把指针赋给另一个指针,有的malloc一个内存,然后把整个字符串的值拷贝过来,有点费解,就研究了一下,会了之后发现也没什么奥秘,其实很简单,不过还是记录一下比较...
  • 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 ->...
  • 字符串数组相加操作(转)

    千次阅读 2018-08-14 14:59:37
    strcat 将两个char类型连接。 char d[20]=”GoldenGlobal”; char *s=”View”; strcat(d,s); ...d和s所指内存区域不可以重叠且d必须有足够的空间来容纳s的字符串。 返回指向d的指针。...
  • 指针运算 给一个指针加1表示要让指针指向下一个变量 int a[10]; int *p = a; *(p+1) ——> a[1] *(p+n) <==> a[n] //等价 如果指针不是指向一片连续分配的空间,如数组,则这种运算没有意义 *p++ ...
  • 对于C语言,爱站技术小编对C语言字符串函数的一些使用心得在此分享給各位,也请C语言编程高手多指教啦~那接下来就跟爱站技术频道的小编一起来了解下其中的详情吧。就字符串的拼接函数为例strcat.原型:extern char ...
  • C语言打印字符串的一部分的方法

    千次阅读 2021-05-19 08:37:27
    C语言打印字符串的一部分的方法6.6 中讨论了怎样拷贝字符串的一部分,为了打印字符串的一部分,你可以利用6.6的例子中的部分技巧,不过你现在要使用的是printf()函数,而不是sprintf()函数。请看下例:# include #...
  • 指针为什么要区分类型:在同一种编译器环境下,一个指针变量所占用的内存空间是固定的。比如,在16位编译器环境 下,任何一个指针变量都只占用8个字节,并不会随所指向变量的类型而改变。虽然所有的指针都只占8个字节,但...
  • 字符串相加

    2021-09-04 10:01:19
    字符串相加(点击链接进入题目) 给定两个字符串形式的非负...  我们先假设给定的不是字符串形式的数字,而是正常的非负整数,则两数相加遵循正常的加法运算,个位数与个位数相加,十位数与十位数相加,如果该位计
  • 字符串的拼接函数为例strcat.原型:extern char *strcat(char *dest,char *src);用法:#include 功能:把src所指字符串添加到dest结尾处(覆盖dest结尾处的'\0')并添加'\0'。说明:src和dest所指内存区域不可以重叠...
  • 字符串的存储方式有字符数组和字符指针。 因为字符串是由多个字符组成的序列,所以要想存储一个字符串,可以先把它拆成一个个字符,然后分别对这些字符进行存储,即通过字符数组存储。字符数组是一个数组,且是存储...
  • C语言指针变量包含指针自己的地址、存储单元储存的内容(指向的地址)、指向的地址上储存的值。 指针自己的地址:&指针名 存储单元储存的内容(指向的地址):指针名 指向的地址上储存的值:*指针名 ...
  • C语言中压缩字符串的简单算法在C应用中,经常需要将字符串压缩成一个整数,即字符串散列。本文是百分网小编搜索整理的关于C语言中压缩字符串的简单算法,供参考学习,希望对大家有所帮助!想了解更多相关信息请持续...
  • 出现x次,那就从堆上分配 x + 1个字符串指针大小的二重指针 //2.对s进行第二次遍历,给二重指针指向的地址初始化 //3.对s进行第三次遍历,给二重指针指向的指针指向的值赋值 #include #include char** split(char* s, ...
  • 题目:将a和b所指的两个字符串转换成面值相同的整数,并进行相加,将结果作为函数值返回,规定字符串中只含9个的以下数字字符。 例如,主函数中输入字符串:32486和12345,在主函数中输出的函数值为:44831。 #...
  • kk是字符串指针,hh ll 为整数 我多次实验下来是删除操作 我想知道这个操作的原理是什么? 我认为会影响到a 的数据,但实际输出后并没有影响a这个二维字符串的数据 <p>//char a[N][80] 已经...
  • C语言基础--字符串

    2022-03-31 17:49:49
    C语言中,有整型、浮点型、指针类型和字符型,但没有字符串型,在有些语言中是存在字符型类型的。
  • C语言 计算字符串长度的几种方法

    千次阅读 2020-09-23 21:09:30
    C语言 计算字符串长度的几种方法 C语言计算字符串长度,可以手动计算也可以使用库函数或者sizeof()操作符。 自定义函数求长度 使用strlen()函数 使用sizeof()操作符 自定义函数 int cont_str(char *s) { int i = 0;...
  • 指针C语言的精华所在,有了指针C语言可以实现许多灵活的操作,如动态数据结构操作等等。事实上,指针之所以有如此广泛的运用,主要有两方面:一是指针往往是某个计算的唯一表达途径,这是它的一些性质所定;另一...
  • C语言 字符串和数字转换函数

    万次阅读 多人点赞 2019-01-08 06:03:52
    atof(将字符串转换成浮点型数) 相关函数 atoi,atol,strtod,strtol,strtoul 表头文件 #include &lt;stdlib.h&gt; 定义函数 double atof(const char *nptr); 函数说明 atof()会扫描参数...
  • 运行环境:CentOs 64位--vim最近在看《剑指...下面是我看了之后对之前做过的大整数加法做了一些完善,之前的只能实现对纯数字字符进行求和,甚至连对空指针的处理都没有,好惭愧。我会用注释来记录自己对此算法的理...
  • atof(将字符串转换成浮点型数) atoi(将字符串转换成整型数) atol(将字符串转换成长整型数) strtod(将字符串转换成浮点数) strtol(将字符串转换成长整型数) strtoul(将字符串转换成无符号长整型数) toascii(将...
  • 知识内容:1.C\C++字符串简述2.C字符串相关操作3.C++ string类相关操作一、C\C++字符串简述1.C语言字符串C语言字符串是字符的数组。单字节字符串顺序存放各个字符串,并用'\0'来表示字符串结束。在C语言库函数中,有...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,540
精华内容 4,216
关键字:

c语言字符串指针相加