C语言学习笔记二(字符串)

  1、 C对字符串的存储 实例:定义一个256个字符的字符串,并将字母表中的大写字母存储在前26位
  char string[256];
  int i;
  for(i = 0; i 字符串的长度
  法1:
  char string[256];
  int i;
  gets(string);
  for(i = 0; string[i] != NULL;i++)
  putchar(string[i]);
  printf("该字符串的长度为:%d",i);
  法2:大多数C编译器提供了strlen函数,它返回串的字符数目。
  char string[]="something......"
  strlen(string);
  为了更好地理解strlen函数如何工作,可以考虑如下方法,该方法计算字符串的长度但是不返回NULL字符。
  size_t strlen(const char string)
  {
  int i = 0;
  while(string[i])
  i++;
  return i;
  }
  3、 将一个字符串复制到另一个字符串中
  #include
  char *strcpy(char *destination, const char *source);
  为了理解strcpy函数是如何工作的,可以思考如下的方法:
  char *strcpy(char *destination, const char *source)
  {
  while(*destination++ = *source++)
  ;
  return (destination-1)
  }
  4、 将一个字符串追加到另一个字符串上
  #include
  char *strcat(char *target, const char *source)
  为了更好地理解strcat函数,思考如下的方法:
  char *strcat(char *target, const char *source)
  {
  char *original = target;
  while(*target)
  target++; //find the end of the string
  while(*target ++ = *source++)
  ;
  return (original);
  }
  5、 给字符串追加N个字符
  #include
  char *strncat(char *destination, const char *source,int n)
  为了更好地理解strncat函数,思考如下方法:
  char *strncat(char *destination, const char *source,int n)
  {
  char *original = destination;
  int i = 0;
  while(*destination)
  destination++; //find the end of the string while((i++ n) *destination = NULL; return (original); } 6、 判断两个字符串是否相同
  int streql(char *string1, char *string2)
  {
  while((*string1 == *string2) && (*string1))
  {
  string1++;
  string2++;
  }
  return ((*string1 == NULL) && (string2 == NULL));
  }
  7、 比较字符串时忽略大小写
  #include
  int strieql(char *string1, char *string2)
  {
  while( (toupper(*string1) == toupper(*string2)) && *string1)
  {
  string1++;
  string2++;
  }
  return ( (*string1 == NULL) && (*string2 == NULL) );
  }
  8、 将字符串转化为大写或者小写
  #include
  int *strlwr(char *string)
  {
  char *original = string;
  while(*string)
  {
  *string = tolower(*string);
  string++;
  }
  return (original);
  }
  9、 获取字符串中第一次出现的某个字符
  char *strchr(const char *string, char letter)
  {
  while((*string != letter) && (*string))
  string++;
  return (string);
  }
  10、返回索引到串的首次出现
  int str_index(const char *string, char letter)
  {
  char *original = string;
  while((*string != letter) && (*string))
  string++;
  return (string - original);
  }
  11、将字符串的字母反转
  char *strrev(const char *string)
  {
  char temp;
  char *original = string;
  char *forward = string;
  while(*string)
  string++;
  while(forward 字符串
  int strcmp(const char *string1, const char *string2)
  {
  while( (*string1 == *string2) && (*string1) )
  {
  string1++;
  string2++;
  }
  if((*string1 == *string2) && (!*string1))
  return 0;//Same strings
  else if((*string1) && (!*string2))
  return (-1); //Same but string1 is longer
  else if((!*string1) && (*string2))
  return (1); //Same but string2 is longer
  else
  return ( (*string1 > *string2) ? -1: 1); //Different
  }
  13、比较两个字符串的前N个字符串
  int strncmp(const char *string1, const char *string2, size_t n)
  {
  while( (*string1 == *string2) && (*string1) && i *string2) ? -1: 1); //Different
  }
  14、将字符串转化为数字 函数 用途 atof 将字符串转换为浮点数值 atoi 将字符串转换为整型数值 atol 将字符串转换为长整数数值 strtod 将字符串转换为双精度型数值 strtol 将字符串转换为长整型数值 15、复制字符串的内容
  调用strdup函数时,函数使用malloc分配内存,然后哦将字符串单元拷贝至内存单元。但程序不再使用字符串拷贝。
  #include
  #include
  char *strdup(constchar *string)
  {
  char *ptr;
  if(ptr = malloc(strlen(string)+1))
  strcpy(ptr,string);
  returnptr;
  }
  16、从给定字符序列中查找字符的首次出现
  在字符串string1中,函数将返回第一个不包含在string2中的字符的偏移量。
  size_tstrspn(constchar *string1, constchar *string2)
  {
  inti, j;
  for(i = 0; *string1; string1++,i++ )
  {
  for(j = 0; string2[j]; j++)
  {
  if(*string1 == string2[j])
  break;
  if(string2[j] == NULL)
  break;
  }
  }
  returni;
  }
  17、在字符串中查找子字符串
  char *strstr(constchar *string1, constchar *string2)
  {
  inti,j,k;
  for(i = 0; string1[i]; i++)
  for(j = i, k=0; string1[j] == string2[k]; j++, k++)
  if(!string2[k+1])
  return (string1 + i);
  returnNULL;
  }
  18、计算子字符串出现的次数
  charstrstr_cnt(constchar *string, constchar *substring)
  {
  inti,j,k,count=0;
  for(i = 0; string[i]; i++)
  for(j = i, k=0; string[j] == substring[k]; j++, k++)
  if(!substring[k+1])
  count++;
  returncount;
  }
  19、从字符串中删除子字符串
  char *strstr_rem(char *string, char *substring)
  {
  inti,j,k, loc = -1;
  for(i = 0; string[i] && (loc == -1); i++)
  for(j = i, k = 0; string[j] == substring[k]; j++, k++)
  if(! substring[k + 1])
  loc = i;
  if(loc != -1)
  {
  for(k = 0; substring[k]; k++)
  ;
  for(j = loc, i = loc + k; string[i]; j++, i++) string[j] = string[i]; string[i] = NULL; } return (string); } 20、用另一个子字符串代替子字符串
  #include
  char *strstr_rep(char *Source, char *Old, char *New)
  {
  char *original = Source;
  chartemp[256];
  intold_length = strlen(Old);
  inti,j,k, location = -1;
  for(i = 0; Source[i]; i++)
  for(j = i, k = 0; Source[j] == Old[k]; j++,k++ )
  location++;
  if(location != -1)
  {
  for(j = 0; j 字符串是大写还是小写
  if(islower(character))
  if(isupper(character))
  #defineislower(c) (((c) > 'a') &&((c) 'A') &&((c)
  int_toupper(intcharacter);
  inttoupper(intcharacter);
  23、将字符转换成小写形式
  #include
  int_tolower(intcharacter);
  inttolower(intcharacter);
  24、初始化字符串
  chartitle[] = "something......."
  charstr[64] = "string..."

你可能感兴趣的:(技术杂绘)