字符串的操作
putchar
向标准输入字符,其会将字符输出到终端上
返回写的字符,EOF(-1)表示书写失败
#include <stdio.h>
int main(int argc, char const *argv[])
{
int ch;
while ( (ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
getchar
从标准中读入一个字符
#include <stdio.h>
int main ()
{
char c;
printf("请输入字符:");
c = getchar();
printf("输入的字符:");
putchar(c);
return(0);
}
字符串函数
对于字符串来说C语言有很多标准库来处理这些字符串
下面介绍string.h中的一些函数
strlen
作用:返回字符串的长度
用法:size_t strlen(const char *s)
注:以下代码块中通过自己写出这些函数来达到同样的目的
#include <stdio.h>
#include <string.h>
int mylen(const char *s)
{
int cnt = 0;
int idx = 0;
while (s[idx] != '\0'){
idx++;
cnt++;
}
return cnt;
}
int main(int argc, char const *argv[])
{
char line[] = "Hello";
printf("strlen=%lu\n",mylen(line)); //有多少字符
printf("sizeof=%lu\n",sizeof(line));
}
strcmp
strcmp用于比较两个字符串
int strcmp(const char *s1, const char *s2)
返回结果:
0 | 1 | -1 |
---|---|---|
s1=s2 | s1>s2 | s1<s2 |
注:以下代码块中通过自己写出这些函数来达到同样的目的
1、将其当作数组,有一个整数来当作下标
#include <stdio.h>
#include <string.h>
int mycmp(const char* s1, const char* s2)
{
int idx = 0;
while( s1[idx] == s2[idx] && s1[idx] != '\0'){
idx ++;
}
return s1[idx] - s2[idx];
}
int main(int argc, char const *argv[])
{
char s1[] = "abc";
char s2[] = "abc";
printf ("%d\n", mycmp(s1,s2));//数组的比较使用strcmp;
return 0;
}
2、直接使用指针
#include <stdio.h>
#include <string.h>
int mycmp(const char* s1, const char* s2)
{
while ( *s1 == *s2 && *s1 != '\0'){
s1++;
s2++;
}
return *s1 - *s2;
}
int main(int argc, char const *argv[])
{
char s1[] = "abc";
char s2[] = "abc";
printf ("%d\n", mycmp(s1,s2));//数组的比较使用strcmp;
return 0;
}
strcpy
作用:将src的字符串拷贝到dst中
用法:char *strcpy(char *restrict dst,const char *restrict src)
注:以下代码块中通过自己写出这些函数来达到同样的目的
1、将其当作数组,有一个整数来当作下标
#include <stdio.h>
#include <string.h>
char* mycpy(char* dst, const char* src)
{
int idx = 0;
while (src[idx]){
dst[idx] = src[idx];
idx++;
}
dst[idx] = '\0';
return dst;
}
int main(int argc, char const *argv[])
{
char s1[] = "abc";
char s2[] = "bbc";
mycpy(s1,s2);
printf("%s", s1);
return 0;
}
2、直接使用指针
#include <stdio.h>
#include <string.h>
char* mycpy(char* dst, const char* src)
{
char* ret = dst;
while (*src){
*dst++ = *src++;
}
*dst = '\0';
return dst;
}
int main(int argc, char const *argv[])
{
char s1[] = "abc";
char s2[] = "bbc";
mycpy(s1,s2);
printf("%s", s1);
return 0;
}
strchr与strrchr
作用:字符串中找字符
用法:char *strchar(const char *s, int c);
用法:char *strrchar(const char *s, int c);
注:以下展示strchr与strrchr的用法
strchr
#include <stdio.h>
#include <string.h>
int main ()
{
const char str[] = "Hello";
const char ch = 'l';
char *ret;
ret = strchr(str, ch);
printf("e之后的字符为%s", ret);
return 0;
}
strrchr
#include <stdio.h>
#include <string.h>
int main ()
{
const char str[] = "Hello";
const char ch = 'l';
char *ret;
ret = strchr(str, ch);
printf("e之后的字符为%s", ret);
return 0;
}
strstr
作用:字符串中找字符串
char *strstr(const char *s1,const char *s2)
注:以下展示strstr的用法
#include <stdio.h>
#include <string.h>
int main()
{
const char start[20] = "Hello";
const char seek[10] = "llo";
char *ret;
ret = strstr(start, seek);
printf("子字符串是: %s\n", ret);
return(0);
}