字符串总结1
字符串
字符串声明:
1.数组形式:
char ar[100]="Hello World";
2.指针形式:
char *pch="Hello World";
字符串的输入:
1.gets()函数从键盘接受一行标准输入,不检查字符串的长度,直到遇到回车结束输入。在结束之前会给最后一位加上一个'\0',然后把这个字符串交给调用它的程序。
写一个小例子:
#include<stdio.h>
#define MAX 81
int main()
{
char cName[MAX];
printf("HI,what is your name?\n);
gets(cName);
printf("Nice name %s!\n);
return 0;
}
但是不建议使用这个输入函数,因为在现在大多数的编译器对于这个函数都是有警告的甚至会报错,因为这个函数并不检查字符串的的长度极易引起问题,曾经一度肆虐的蠕虫病毒就是黑客利用这个BUG所创造的。
建议使用fgets()函数但是这个函数需要两个参数,第一个为可以读取的最大字符数,第二个为说明读取哪一个文件,返回值为一个指针,并且会吸收换行符并不会丢弃它。
ptr=fgets(name,MAX,stdin);
另一个重要的输入函数scanf()函数,这个函数使用两种方式决定如何结束。1.从遇到第一个非空白字符开始,直到下一个空白字符结束。如果使用了%10s则会读入10个字符结束。由最先满足的条件决定何时结束。
scanf("%s",cName);
字符串的输出
1.puts()函数。与printf不同的是这个函数在显示字符串时会自动添加一个换行符。和gets()函数一样都有一个面向文件版本的一个函数fputs(),但是他并不添加换行符。
另一个重要的输出函数printf()函数,相信大家都很熟悉了。不做过多介绍。
自定义字符串输入\输出函数getchar()和putchar()他们通过一个指针来进行输入输出。
字符串函数(这里我会把每一种函数实现一遍)
strlen()函数:用来计算一个字符串的有效长度
int my_strlen(char const *pcStr)
{
int iLen=0;
while(*pcStr!='\0')
{
iLen++;
}
return iLen;
}
strcpy()函数:用来将字符串1,拷贝到字符串2 的一个函数
char *my_strcpy(char *pcDst, char const *pcSrc)
{
char *pcTemp;
if(NULL == pcDst || NULL == pcSrc)
{
return NULL;
}
pcTemp = pcDst;
while(*pcSrc != '\0')
{
*pcDst = *pcSrc;
pcDst++;
pcSrc++;
}
* pcDst = '\0';
return pcTemp;
}
strcmp()函数:比较两个字符串是否一样,如果相同返回0,如果A长返回1否则返回-1.
int my_strcmp(char const *pcStr1, char const *pcStr2)
{
while(*pcStr1 == *pcStr2 && *pcStr1 != '\0')
{
pcStr1++;
pcStr2++;
}
return (*pcStr1 - *pcStr2);
}
strcat()函数将两个字符串连接在一起:
char *my_strcat(char *pcDst, char const *pcSrc)
{
char *pcTemp;
pcTemp = pcDst;
while(*pcDst != '\0')
{
pcDst++;
}
while (*pcSrc != '\0')
{
*pcDst = *pcSrc;
pcDst++;
pcSrc++;
}
*pcDst = '\0';
return pcTemp;
}
strdup()函数:复制一个字符串到一个新开辟的内存空间中
char *mystrdup(char const *pcStc)
{
int iLen=0;
char *pCh2;
iLen=strlen(pcStc);
pCh2=(char *)malloc(sizeof(iLen+1));(在主函数中记得释放这个空间)
strcpy(pCh2,pcStc);
return pCh2;
}
strchr()与strrchr()函数:接受一个字符串和一个字符,在这个字符串中查找到这个字符并且显示其后边的字符串和倒序检查显示剩下的字符串。
#include<stdio.h>
char *mystrchr(char const *pcStr1,char cDst);
//char *strrchr(char const *pcStr1,char cDst);
int main()
{
char *pcStr1="hello";
char ch='l';
mystrchr(pcStr1,ch);
strrchr(pcStr1,ch);
printf("%s\n",mystrchr(pcStr1,ch));
return 0;
}
char *mystrchr(char const *pcStr1,char cDst)
{
while(*pcStr1!=cDst && *pcStr1!='\0')
{
pcStr1++;
}
return (char *)pcStr1;
}
char *strrchr(char const *pcStr1,char cDst)
{
char *pTemp;
pTemp=pcStr1;
int a=0;
while(*pcStr1!='\0')
{
a++;
}
pcStr1=pTemp;
pcStr1+=a;
while(*pcStr1!=cDst)
{
pcStr1--;
}
return pcStr1;
}