字符串和字符指针

首先,要存一个字符数列,我们可以定义一个数组,也可以定义一个指针。eg:有一个''pointer''字符序列,现在要存入字符序列,我们可以写成char sp[]=''pointer";也可以写成char *sp=''pointer";为了检验二者区别,现在我们在编译器输出:printf("%s ", sa);      printf("%s ", sp)[不加*号];      printf("%s\n", "string");

看上去,我们可以得到pointer pointer string看上去sa和*sp并没有区别【相同的地方:数组名sa、指针sp和字符串 "string" 的值都是地址】,但是,其实它们的位置不一样数组专门开辟了一定的内存来存pointer输出,指针则指向内存中原有的“pointer”。

注:指针字符要先定义在使用,不要引用未赋值的指针。

常用的处理字符的函数:在stdio.h的头文件中,有输入字符串的函数:scanf ( )或gets ( )         输出字符串的函数:printf ( )或puts ( ) 。

注意:getchar()是一个一个字符的输入,gets()是和scanf一样一句一句的读入,只不过gets碰到回车才停止,而scanf碰到回车或空格就停止。

eg:int a[];

用法:scanf (“%c”,a );gets(a);都可以读入数组a的内容,区别在(上文)注意那里。

字符串输入输出函数  示例:int str[]="word";

   (1)  printf ("%s", str); 和puts (str);      都可以输出‘word’,但是puts()可以自动换行。

字符串的复制、连接、比较、以及求字符串长度:相关函数都在头文件string.里面:字符串复制:strcpy (str1, str2)【将字符串 str2 复制到 str1 中,会覆盖前面的,当然,“\0”只有一个】         字符串连接:strcat (str1, str2)【连接两个字符串 str1 和 str2, 并将结果放入 str1中,不覆盖str1】  字符串比较:strcmp (str1, str2) 求字符串长度:strlen (str)。【两个字符串 str1 和 str2 的大小。 规则:按字典序(ASCII码序)】如果 str1 和 str2 相等,返回 0; 如果 str1 大于 str2 ,返回一个正整数;   如果 str1 小于 str2 ,返回一个负整数;主要是比较字符串首元素的地址,比较字符串的内容        字符串长度函数strlen :计算字符串的有效长度,不包括 '\0' eg:strlen ("hello") 的值是: 5。

字符串有专门的函数处理,eg:str=str1+str2;是非法的,要用strcat表连接。

意思是说:使用字符串的时候,不同于int等整型变量,比如:赋值时int的变量可以这样:min=a[i];但是如果是字符的赋值,就要换成:strcpy(min,a);【头文件string.h已写上】。

------如果你不闲麻烦,可以看看这两个代码的区别------

/*求最小数字*/
int main ( ) 
{  int i, n;
    int x, min;    
    scanf ("%d", &n);
    scanf ("%d", &x);
    min = x; 
    for (i = 1; i < n; i++){
        scanf ("%d", &x);
        if (x < min)
            min = x;            
    }
    printf ("min is %d\n", min);
    return 0;
 } 
/*求最小字符串*/
#include<stdio.h>
#include <string.h>
int main ( ) 
{   int i, n;
    char sx[80], smin[80];  
    scanf ("%d", &n);  
    scanf("%s", sx);
    strcpy (smin,sx); 
    for (i = 1; i < n; i++){
       scanf ("%s", sx);
       if (strcmp (sx, smin)<0)  
             strcpy (smin,sx);
     }
    printf ("min is %s\n", smin);
    return 0;
}

切记, scanf里面的函数不能用&a[i],有点难解释,就是一个数字里面存一个字符串,不是存多个字符串!!我们对照最小值的代码,就像里面的x一样,通过for循环不断的覆盖上一次的值,所以是没有所谓的a[i]的说法,字符型数组一次只能存一个字符串!!

-----------------分割线------------------

为了凸显重要性,我们黏贴一遍:

        切记, scanf里面的函数不能用&a[i],有点难解释,就是一个数字里面存一个字符串,不是存多个字符串!!我们对照最小值的代码,就像里面的x一样,通过for循环不断的覆盖上一次的值,所以是没有所谓的a[i]的说法,字符型数组一次只能存一个字符串!!

冷知识:%c表示输出字符【单个】         %s表示输出字符串。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值