C语言、C++中字符及字符串处理的写法总结

C语言:

1、gets()和puts()
用法: gets(line);puts(line);
其中,line是字符数组(注:C语言中没有独立定义字符串的变量类型,而是采用字符数组的形式;字符串和字符数组很大的区别就是字符串以'\0'结尾)
函数特点:
(1)在读入一行时,空格也会作为一个字符读入;
(2)如果读入一行的字符串长度超过字符数组定义的长度,会出现警告;
(3)用gets()读入时,只有遇到回车'\n'才会结束读入,并在末尾自动添加'\0'
用puts()输出时,只有遇到'\0'才会停止输出,因此在输出通过字符数组定义的字符串时末尾一定要添加'\0',否则会出错。

示例代码:

#include<stdio.h>
const int maxn=1e4+5;

int main()
{
    char line[maxn];
    gets(line);
    puts(line);
    return 0;
}

结果:
这里写图片描述

2、getchar()和putchar()
用法: c=getchar(); putchar(c);
其中,c是int型;如果写成
char c;
c = getchar();
有时可能出现错误,因为getchar函数除了返回终端输入的字符外,在遇到Ctrl+Z即文件结束符EOF时,getchar ()返回的EOF在函数库里一般定义为-1。因此,在这种情况下,getchar函数返回一个负值,把一个负值赋给一个char型的变量是不正确的。
函数特点:
(1)用getchar读入时,如果不按回车符,所有输入会放入缓冲区,而不会被读入,所以执行c=getchar();时,我们输入第一行后如果不按回车键,第一行仍然不会读入;
(2)每行结束输入按回车时,虽是用来告诉系统输入已结束,但同时回车符'\n'也会作为一个字符放入缓冲区 ;
(3)putchar()输出指定字符,不会在输出后自动换行,所以在每行结束输入时要用putchar(‘\n’)换行;
(4)getchar可以读入所有字符,包括空格、回车符等;
(5)windows下如果想结束,就输入Ctrl+Z,表示EOF。
标准写法:

#include<stdio.h>

int main()
{
    int c;
    c=getchar();
    while(c!=EOF){
        putchar(c);
        c=getchar();
    }
    return 0;
}

结果:
这里写图片描述

例题运用:

链接:L1-011. A-B
本题要求你计算A-B。不过麻烦的是,A和B都是字符串 —— 即从字符串A中把字符串B所包含的字符全删掉,剩下的字符组成的就是字符串A-B。

输入格式:

输入在2行中先后给出字符串A和B。两字符串的长度都不超过104,并且保证每个字符串都是由可见的ASCII码和空白字符组成,最后以换行符结束。

输出格式:

在一行中打印出A-B的结果字符串。

输入样例:
I love GPLT! It’s a fun game!
aeiou
输出样例:
I lv GPLT! It’s fn gm!

示例代码:

#include<stdio.h>
#include<string.h>
const int maxn=1e4+5;
char line[maxn];

int main()
{
    int b[256],c;
    memset(b,0,sizeof(b));
    gets(line);
    while((c=getchar())!='\n') b[c]=1;
    int i=0;
    while(line[i]!=0){
        if(!b[line[i]]) putchar(line[i]);
        i++;
    }
    putchar('\n');
    return 0;
}

C++:

1、cin.getline(line,x,c)
用法: cin.getline(字符串变量,字符个数,结束字符);
其中,line是用字符数组定义的字符串;
当第三个参数缺省时,系统默认为'\0'
函数特点:
(1)读入字符串,并且可以读入并输出空白符,遇结束字符或默认的'\0'结束,按回车符后才会从缓冲区读取;
(2)函数属于istream流。

示例代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
const int maxn=1e4+5;
char line[maxn];

int main()
{
    cin.getline(line,maxn,'!');
    cout<<line<<endl;
    return 0;
}

结果:
这里写图片描述

2、getline(cin,line)
**用法:**getline(cin,line)
其中,line是string定义的字符串;
函数特点:
(1)可以读入并输出空白符,遇'\n'停止读入并在末尾自动添'\0'
(2)函数属于string流,需包含头文件< string >
示例代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
string line;

int main()
{
    while(getline(cin,line))
        cout<<line;
    return 0;
}

结果:
这里写图片描述
3、cin.get()和cout.put()
**用法:**c=cin.get(); cout.put(c);
其中,c是字符;
函数特点:读入单个字符,可以读入空白符;

示例代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<sstream>
using namespace std;
char line;

int main()
{
    while((line=cin.get())!='\n')
        cout.put(line);
    return 0;
}

结果:
这里写图片描述

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值