c学习之指针与字符串

字符串可以用数组(指针常量)或指针变量表示,如下:

char *str1=”hello world”;      //事实上是把字符串的地址赋给指针或变量

char str2[12]=”hello world”;  //注意 数组只能在定义时赋初值。若写成char str2[12];     str2[12]="hello world";是错误的。

键盘输入:

      char *str3;
      char str4[20];
      str3 = "Iwant to buy iPad\n";//可以把字符串地址赋给变量
      scanf("%s",str4);

 

str3是指针变量,不可以由输入的方式来完成赋值,指针变量的赋值只能赋予地址,决不能赋予任何其它数据,否则将引起错误,故不能用键盘输入。

str4是一个数组,它是指针常量,所以str3已经在固定的地址,不可以再把一个字符串地址赋值给它。

输出:

printf("%s\n", str2);   // %s   地址
printf("%s\n", str2);
for(i=0;*str!=’\0’;i++)
{
      Printf(“%c”,*str);
      str++;                  //*(str++)//*str++
}


常用的字符串函数

头文件string.h

1   字符串的长度表示此字符串有多少个字符,不包括空字符(‘\0’)结束符,但是包括空格字符等。计算字符串长度的函数为strlen(str1);

int  stringLength(char *p)
{
      int t=0;
      while(*p!=’\0’)    //空字符是字符串的终止符;
      {
       t++;
       p++;
      }
} 


2    字符串的拷贝库函数为strcpy(str1,str2),表示从str2字符串的第一个字符,逐一地复制到str1字符串。

void myStringCopy(char  *dest, char *source )
{
      while((*dest= *source)!=’\0’)    //表达式的值即为*dest更新的值
{                           //先复制,再判断是不是结束符---精炼表达
      source++;
      dest++;
}
}


 

      如只需要拷贝n个字符时。。。。。。

void myStringCopy_n(char  *dest, char *source ,int n)
{
      int i=1;
      while((i<=n)&&(*dest=*source)!=’\0’)
	{
	  source++;
	  dest++
        }
}
 

3    字符串的连接

库函数strcat(str1,str2)将str2字符串拷贝到str1字符串的尾端。注意,str1必须要分配足够的空间

void my_strcat(char *str1,char *str2)
{
      while(*str1!='\0')
           str1++;
      while((*str1=*str2)!='\0')
      {
           str1++;
           str2++;
      }
}        

如果只需要连接n个字符,则可调用库函数strncat.

           strncat(str1,str2,n);

意思是将str2的前n个字符连接到str1;

void my_strncat(char *str1,char *str2,int n)
{
      int i=1;
      while(*str1!='\0')
           str1++;
      while((i<=n)&&(*str1=*str2)!='\0')
      {
           str1++;
           str2++;
	   i++;
      }
}  

 

4  字符串的比较

      库函数 strcmp(str1,str2);

void my_strncat(char *str1,char *str2,int n)
{
      int i=1;
      while(*str1!='\0')
           str1++;
      while((i<=n)&&(*str1=*str2)!='\0')
      {
           str1++;
           str2++;
	   i++;
      }
}  

 

若只要比较前面几个字符串

int my_strcmp(char *str1,char *str2,int n)
{
     int i;
     for(i=1;(*str1==*str2)&&i++<=n;str1++,str2++)
         if(*str1==’\0’)
	     return 0;
     return *str1-*str2;
}

若比较两字符串且忽略大小写的差异,则可编写程序如下:

      intstringIgnoreCompare(char *x, char *y)
{
 
      while(*x== *y || *x-32 == *y || *x == *y-32)
      {
           if(*x== '\0')
                 return0;   
           x++;
           y++;  
      }
      return*x-*y;
}




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值