2020-12-03C/C++学习00
请注意,本文编写于 726 天前,最后修改于 704 天前,其中某些信息可能已经过时。

目录


\r与\n

c
\r:return 到当前行的最左边。

\n:newline 向下移动一行,并不移动左右。

Linux中\n表示回车+换行;

Windows中\r\n表示回车+换行。

Mac中\r表示回车+换行。

getchar()

从输入设备(如键盘)读取一个字符。
函数getchar()没有参数

c
例如:
char c;
c = getchar();
从键盘输入:a
则字符型变量c等于字符’a’。上式等价于
scanf("%c",&c);

putchar()

将一个字符输出到输出设备(如显示器)。
putchar(字符型或整型数据);

c
例如:
char c = 'A';
putchar(c);

putchar()函数一次只能输出一个字符
printf()函数可以同时输出多个字符

gets()

最好不用,因为不检查长度

  1. 拒绝服务
  2. 远程代码执行
    如果要用可以使用fgets()

清除缓存

c
VC6可以使用
fflush(stdin);
rewind(stdin);
高版本可以使用
rewind(stdin);
c
//使用方法
char cBuf1;
char cBuf2;
scanf("%c",&cBuf1);
fflush(stdin);
scanf("%c",&cBuf2);
rewind(stdin);

字符数组与字符串

  • 字符数组:不见得是字符串,只要数组的元素是字符,那就是字符数组

  • 字符串:特殊的字符数组,有编码的字符型数组才称为字符串

字符串编码

  1. Pascal风格的字符串
Pascal样式的字符串有一个长度( length ),后跟 length 字节数据。

Length Text
12     "Hello world!"
  • 缺点:要有计划性,需要先算好长度
  • 优点:取Length相加到指定长度就找到了
  1. C风格的字符串
没有长度说明符,但使用零字节表示字符串的结尾。因此,它们没有长度限制。

Hello World!\n
  • 优点:恰好是Pascal的缺点,不需要计算长度
  • 缺点:比如要查找存储的某一个数据,由于不知道长度,所以要从头开始找

字符串初始化

c
char c1[6] = {"Hello"};
char c2[6] = "Hello";
char c3[] = {"Hello"};

字符串操作

strlen

统计字符串长度

c
# include <stdio.h>
# include <stdlib.h>

size_t mystrlen(char str[])
{
    size_t nLen = 0;
    while(str[nLen] != 0)
    {
        nLen++;
    }
    return nLen;
}

int main()
{
    size_t nLen = 0;
    char szBuf[20] = {"Hello world"};
    nLen = mystrlen(szBuf);
    printf("%d\r\n",nLen);
    system("pause");
    return 0;
}

strcpy

c
# include <stdio.h>
# include <stdlib.h>

//拷贝字符串 szSrc => szDst
void mystrcpy(char szDst[],char szSrc[])
{
    size_t i = 0;
    while(szSrc[i] != 0)
    {
        szDst[i] = szSrc[i];
        i++;
    }
    szDst[i] = 0;
}

int main()
{

    char szBuf1[20] = {"Hello"};
    char szBuf2[20] = {""};

    mystrcpy(szBuf2,szBuf1);
    printf("2. 将szBuf1的内容拷贝到szBuf2:%s\r\n",szBuf2);
    system("pause");
    return 0;
}

strcat

c
# include <stdio.h>
# include <stdlib.h>

//字符串拼接
void mystrcat(char szDst[],char szSrc[])
{
    size_t i = 0;
    size_t j = 0;
    while(szDst[i] != 0)
    {
        i++;
    }
    while(szSrc[j] != 0)
    {
        szDst[i] = szSrc[j];
        i++;
        j++;
    }
    szDst[i] = 0;
}
int main()
{
    char szBuf1[20] = {"Hello"};
    char szBuf2[20] = {""};

    mystrcat(szBuf2,szBuf1);
    printf("3. 将字符串szBuf1的内容拷贝到szBuf2内容后面:%s\r\n",szBuf2);
    system("pause");
    return 0;
}

strcmp

c
# include <stdio.h>
# include <stdlib.h>


//比较两个字符串
int mystrcmp(char szDst[],char szSrc[])
{
    size_t i = 0;
    while (szDst[i] != 0 && szSrc[i] != 0)
    {
        if (szDst[i] - szSrc[i] > 0)
        {
            return szDst[i] - szSrc[i];
        }
        else if (szDst[i] - szSrc[i] < 0)
        {
            return szDst[i] - szSrc[i];
        }
        else
        {
            i++;
        }
    }
    if (szDst[i] == 0 && szSrc[i] == 0)
    {
        return 0;
    }
    return -1;
}
int main()
{

    int nRet = 0;
    char szBuf1[20] = {"Hello"};
    char szBuf2[20] = {"Hello"};

    nRet = mystrcmp(szBuf2,szBuf1);
    printf("3. 字符串szBuf1的与szBuf2比较:%d\r\n",nRet);
    system("pause");
    return 0;
}

strlwr

c
# include <stdio.h>
# include <stdlib.h>

//将字符串中的大写转换成小写
void mystrlwr(char str[])
{
    size_t i = 0;
    while(str[i] != 0)
    {
        if (str[i]  >= 'A' && str[i] <= 'Z')
        {
            str[i] = str[i] + 32;
            i++;
        }
        else
        {
            i++;
            continue;
        }
    }
}

int main()
{
    size_t nLen = 0;
    int nRet = 0;
    char szBuf1[20] = {"HElLo"};
    char szBuf2[20] = {"Hello"};

    mystrlwr(szBuf1);
    printf("5. 将szBuf1中的大写字母换成小写: %s\r\n",szBuf1);

strupr

c
# include <stdio.h>
# include <stdlib.h>

//将字符串中的小写转换成大写
void mystrupr(char str[])
{
    size_t i = 0;
    while(str[i] != 0)
    {
        if (str[i]  >= 'a' && str[i] <= 'z')
        {
            str[i] = str[i] - 32;
            i++;
        }
        else
        {
            i++;
            continue;
        }
    }
}
int main()
{
    size_t nLen = 0;
    int nRet = 0;
    char szBuf1[20] = {"HElLo"};
    char szBuf2[20] = {"Hello"};
    mystrupr(szBuf1);
    printf("6. 将szBuf1中的小写字母换成大写: %s\r\n",szBuf1);

    system("pause");
    return 0;
}

本文作者:Na1r

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!