笔记(5)字符串和字符串函数

来源:互联网 发布:手机导航软件 编辑:程序博客网 时间:2024/06/06 19:19
**********************************************************************************
-------字符串和字符串函数
#include<stdio.h>
int main()
{
    
    charhear[]="How are you!";//char *heard="How areyou!";//*(head++)   
    const char*p="Hello!What is your name?";
    const char*mp[3]={"Hello!","I'm zbg","Nice to me you,I'm wwk"};
   puts(p); //mp数组实际并不存放字符串,它只存放字符串的地址
            //*mp[0],mp[0][0]表示第一个字符串的第一个字符
    for(inti=0;i<24;i++)
      putchar(*(p++));
     puts("");
    for(intj=0;j<3;j++)
      puts(mp[j]);
         return 0;
}
   
-------------------------------------------------------------------------------
    char*p1="Peter";
   p1[0]='T';//不允许!!!
   printf("Peter");
   printf(":Beware the %s!\n","Peter");
   
-------------------------------------------------------------------------------
   
    char*p2;
   while(gets(p2)!=NULL)//可以检测是否到了文件末尾
    
    一、空指针的空字符的区别:
    1、空指针是一个地址,而空字符是一个char类型的数据对象,其值为0.
    2、数值上两者都可用0表示,但它们的概念不同:
      NULL是一个指针,而0是一个char类型的常量
    
   二、使用gets(),当输入的数据超出预留存储区时,多出的字符简单的溢出到相邻的
      内存区,而fgets()让用户指定最大读入字符数
      重要一点,gets()很不安全!!!!!!!!!!!
    
-------------------------------------------------------------------------------
一个fgets()的示例

#include<stdio.h>
#define MAX 80
int main()
{
    charname[MAX];
    char*ptr;
    puts("Whatis your name?");
   ptr=fgets(name,MAX,stdin);
   printf("%s!Hi~%s!\n",name,ptr);
    return0;
   //运行结果:
    //What isyour name?
   //KangKang
   //KangKang
   //!Hi~KangKang
    //!
   //-----------------------------------------------------------
    问题在于fgets()将换行符也存储到字符里(而gets()是将其丢弃)
     解决方法:可用strchr()来定位和删除换行符
     char *strchr(const char *s,intc);
    该函数返回一个指向字符串s中存放字符c的第一个位置的指针,如果没找到,
     函数就返回一个空指针NULL。
     char linep[80];
     char *fine;

     fgets(line,80,stdin);
     find=strchr(line,'\n');//查找换行符
    if(find)               //如果该地址不为NULL
        *fine='\0';        //就把一个空字符放在这里
      else  ...
   -----------------------------------------------------------   
}


-------------------------------------------------------------------------------
 gets()丢掉输入的换行符
 fgets()存储输入的换行符
 puts()为输出添加换行符
 fputs()不为输出添加换行符
//puts()的使用,只需给出字符串参数的地址
    char str1[30]="abcdefghijklmnopqrstuvwxyz";>
     char*str2="012345678";
    puts(&str1[5]);//输出为:fghijklmnopqrstuvwxyz
    puts(str2+5);  //输出为:5678

----自定义字符串输入/输出函数-------------------------------------------------
以一个类似puts()函数为例,其可以计算输出字符个数
#include<stdio.h>
int puts2(char *string)
{
    intcount=0;
   while(*string)//当string指向空字符时,*string的值为0,将结束循环
    {
      putchar(*string++);
        count++;
    }
   putchar('\n');
    printf("Icount %d characters\n",count);
    returncount;

}
int main()
{
    //intcount;count=
    puts2("12345678");
   //printf("There are %dcharacters\n",count);
return 0;
}

-------------------------------------------------------------------------------
--字符串函数#include<string.h>

   char str1[]="abcd";
   char str2[]="1234";
  strlen(str1)=4,strcat(str1,str2)="abcd1234",strncat(str1,str2,3)="abcd123",
  strcmp(str1,str2),strncmp(str1,str2,3),strcpy(),strncpy()-->>较为谨慎的选择(类似fgets())
  1、对于strcmp()如果str1>str2(字符串在字母表中的顺序,确却的说是按机器编码顺序--所有字符),
  strcmp()返回一个负数;如果相同,返回0;如果str1<str2,返回一个正数。确切的数值则依赖于
   不同的C实现。
   2、char *str;
     strcpy(str,"The C of Tranquility");//存在一个问题
     函数将把字符串"The C ofTranquility"复制到str指定的地址中,但是str没有初始化,
     因此这个字符串可能别复制到任何地方!
    注意:声明一个数组将为数据分配存储空间:而声明一个指针只为一个地址分配存储空间。
  3、函数strncpy(target,source,n)从source把n个字符(或空字符之前的字符,由二者中最先满足的
     那个决定何时停止)复制到target,n应比目标数组大小少一,预留给空字符‘\0’
  4、sprintf()是在stdio.h中声明的,作用和printf一样,但它是写到字符串里而不是写到输出显示。
     #include<stdio.h>
     #define MAX 20
     int main()
     {
      charformal[2*MAX+10];
      charname[MAX]="Always Online";
      doubleprize=500000.00;
     sprintf(formal,"%-15s: $%6.2f",name,prize);
     puts(formal);
      return0;
      }
   sprintf()命令获取输入,并把输入格式化为标准形式后存放在字符串formal中  
 
-------------------------------------------------------------------------------
--ctype.h字符函数toupper()和ispunct()

 用toupper()实现将整个字符串转换为大写,ispunct()计算字符串标点字符的个数
示例:
#include<stdio.h>
#include<string.h>
#include<ctype.h>
void ToUpper(char *str)
{
   while(*str)
    {
      *str=toupper(*str);
      str++;
    }
}
int PunctCount(const char *str)
{
    intcount=0;
    while(*str)
     {
       if(ispunct(*str))
          count++;
       str++;
     }
     returncount;
}
int main()
{
    charstr[30];
   gets(str);
   ToUpper(str);
   puts(str);
    printf("Thatline has %d punctutation characters.\n",PunctCount(str));
return 0;
}
-------------------------------------------------------------------------------

#include<stdio.h>
#include<string.h>
int  main(void)
{
    charnote[]="See you at the snack bar.";
    char*ptr,*p1;
    
   p1=note+strlen(note);
   while(--p1>=note)
       puts(p1);
    
   ptr=note;
   puts(ptr);//See you at the snack bar.
   puts(++ptr);//ee you at the snack bar.
   note[7]='\0';
   puts(ptr);  //ee you
    puts(++ptr);//e you
      
return 0;
}


0 0
原创粉丝点击