天天看点

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=+;

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

结果:

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

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 ;
}
           

结果:

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

例题运用:

链接: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=+;
char line[maxn];

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

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=+;
char line[maxn];

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

结果:

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

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 ;
}
           

结果:

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

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 ;
}
           

结果:

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