C语言学习笔记二(字符串)
1、C对字符串的存储实例:定义一个256个字符的字符串,并将字母表中的大写字母存储在前26位
charstring[256];
inti;
for(i=0;i字符串的长度
法1:
charstring[256];
inti;
gets(string);
for(i=0;string[i]!=NULL;i++)
putchar(string[i]);
printf("该字符串的长度为:%d",i);
法2:大多数C编译器提供了strlen函数,它返回串的字符数目。
charstring[]="something......"
strlen(string);
为了更好地理解strlen函数如何工作,可以考虑如下方法,该方法计算字符串的长度但是不返回NULL字符。
size_tstrlen(constcharstring)
{
inti=0;
while(string[i])
i++;
returni;
}
3、将一个字符串复制到另一个字符串中
#include
char*strcpy(char*destination,constchar*source);
为了理解strcpy函数是如何工作的,可以思考如下的方法:
char*strcpy(char*destination,constchar*source)
{
while(*destination++=*source++)
;
return(destination-1)
}
4、将一个字符串追加到另一个字符串上
#include
char*strcat(char*target,constchar*source)
为了更好地理解strcat函数,思考如下的方法:
char*strcat(char*target,constchar*source)
{
char*original=target;
while(*target)
target++;//findtheendofthestring
while(*target++=*source++)
;
return(original);
}
5、给字符串追加N个字符
#include
char*strncat(char*destination,constchar*source,intn)
为了更好地理解strncat函数,思考如下方法:
char*strncat(char*destination,constchar*source,intn)
{
char*original=destination;
inti=0;
while(*destination)
destination++;//findtheendofthestringwhile((i++n)*destination=NULL;return(original);}6、判断两个字符串是否相同
intstreql(char*string1,char*string2)
{
while((*string1==*string2)&&(*string1))
{
string1++;
string2++;
}
return((*string1==NULL)&&(string2==NULL));
}
7、比较字符串时忽略大小写
#include
intstrieql(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(constchar*string,charletter)
{
while((*string!=letter)&&(*string))
string++;
return(string);
}
10、返回索引到串的首次出现
intstr_index(constchar*string,charletter)
{
char*original=string;
while((*string!=letter)&&(*string))
string++;
return(string-original);
}
11、将字符串的字母反转
char*strrev(constchar*string)
{
chartemp;
char*original=string;
char*forward=string;
while(*string)
string++;
while(forward字符串
intstrcmp(constchar*string1,constchar*string2)
{
while((*string1==*string2)&&(*string1))
{
string1++;
string2++;
}
if((*string1==*string2)&&(!*string1))
return0;//Samestrings
elseif((*string1)&&(!*string2))
return(-1);//Samebutstring1islonger
elseif((!*string1)&&(*string2))
return(1);//Samebutstring2islonger
else
return((*string1>*string2)?-1:1);//Different
}
13、比较两个字符串的前N个字符串
intstrncmp(constchar*string1,constchar*string2,size_tn)
{
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..."