字符串去特定字符

描述

输入字符串s和字符c,要求去掉s中所有的c字符,并输出结果。

输入

测试数据有多组,每组输入字符串s和字符c。

输出

对于每组输入,输出去除c字符后的结果。

输入样例 1

goaod
a

输出样例 1

good

程序代码

#include<bits/stdc++.h>

using namespace std;

int main()
{
    string s;
    char a;
    while(getline(cin,s))
    {
        scanf("%c",&a);//此处不可使用cin>>a,cin不能输入空格,而scanf()可
        int i=0;
        while(s[i]!='\0')
        {
            if(s[i]!=a)
            {
                cout<<s[i];
            }
            i++;
        }
        cout<<endl;
        getchar();//用于吃掉一个回车
    }
    return 0;
}

#include<bits/stdc++.h>

using namespace std;

int main()
{
    string s;
    char a;
    int len,i;
    while(getline(cin,s))
    {
        scanf("%c",&a);
        len=s.length();
        if(len>0&&len<=100)
        {
            for(i=0; i<len; i++)
            {
                if(s[i]!=a)
                {
                    cout<<s[i];
                }
                else
                    continue;
            }
            cout<<endl;
            getchar();
        }
    }
    return 0;
}

扩展资料 :

1、getchar

getchar由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值。当程序调用getchar时.程序就等着用户按键。用户输入的字符被存放在键盘缓冲区中。直到用户按回车为止(回车字符也放在缓冲区中)。
当用户键入回车之后,getchar才开始从stdio流中每次读入一个字符。getchar函数的返回值是用户输入的字符的ASCII码,若文件结尾(End-Of-File)则返回-1(EOF),且将用户输入的字符回显到屏幕。
如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取。也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完后,才等待用户按键。

2、getch

getch与getchar基本功能相同,差别是getch直接从键盘获取键值,不等待用户按回车,只要用户按一个键,getch就立刻返回,getch返回值是用户输入的ASCⅡ码,出错返回-1。
输入的字符不会回显在屏幕上.getch函数常用于程序调试中,在调试时,在关键位置显示有关的结果以待查看,然后用getch函数暂停程序运行,当按任意键后程序继续运行。
这个版本忽略了个重点,getch()是非缓冲输入函数,就是不能用getch()来接受缓冲区已存在的字符,如以下C++程序段,运行时如果输入1 2 3 a时必须用getchar()才能在后面程序获得正常输入,即使先前已经恢复流了,此处用getch()是万万不行的。

3、getche

这个函数与前两上类似,功能也相近,都是输入一个字符,返回值同样是输入字符的ASCII码,但不同的是,此函数在输入后立即从控制台取字符,不以回车为结束(带回显)。

C++里的输入问题:

1、cin>>

(1) 最基本,也是最常用的用法,输入一个数字
(2) 接受一个字符串,输入结束条件 :遇到“回车”、“空格、Tab键。
对结束符的处理 :丢弃缓冲区中使得输入结束的结束符(Enter、Space、Tab)
结论:
当cin>>从缓冲区中读取数据(不论是字符、数字或字符串)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,cin>>会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,cin>>不做处理。

2、cin.get()

(1)读取字符的情况:
输入结束条件:Enter键
对结束符处理:不丢弃缓冲区中的Enter
ch=cin.get() 与 cin.get(ch)是等价的。
注意:
<1> cin.get()从输入缓冲区读取单个字符时不忽略分隔符,直接将其读取。
<2> ch = cin.get()的返回值是int类型,读取成功时,返回读取字符的ASCII码值;遇到文件结束符时,返回EOF,即-1。
<3> cin.get(ch)如果读取成功,返回的是cin对象,因此可以支持链式操作,如cin.get(b).get©。
(2)读取字符串的情况:
<1> cin.get(array_name, Arsize)是用来读取字符串的,可以接受空格字符,遇到Enter结束输入,按照长度(Arsize)读取字符。
<2> 输入超长,则按需要的长度取数据。
<3> cin.get(array,20);读取一行时,遇到换行符时结束读取,但是不对换行符进行处理,换行符仍然残留在输入缓冲区。可以用cin.get()将换行符读入变量b来打印验证,发现打印结果为10,即换行符的ASCII码值。这也是cin.get()读取一行与使用getline读取一行的区别所在。getline读取一行字符时,默认遇到’\n’时终止,并且将’\n’直接从输入缓冲区中删除掉,不会影响下面的输入处理。
<4> cin.get(str,size);读取一行时,只能将字符串读入C风格的字符串中,即char*;但是C++的getline函数可以将字符串读入C++风格的字符串中,即string类型。鉴于getline较cin.get()的这两种优点,建议使用getline进行行的读取。关于getline的用法,下文将进行详述。

3、cin.getline()

接受一个字符串,可以接收空格并输出

4、getline()

C++中定义了一个在std名字空间的全局函数getline,因为这个getline函数的参数使用了string字符串,所以声明在了< string>头文件中了。接受一个字符串,可以接收空格并输出
getline利用cin可以从标准输入设备键盘读取一行,当遇到如下三种情况会结束读操作:1)到文件结束,2)遇到函数的定界符,3)输入达到最大限度。
(1)注意,getline遇到结束符时,会将结束符一并读入指定的string中,再将结束符替换为空字符(’\0’)。因此,进行从键盘读取一行字符时,建议使用getline,较为安全。
(2)和 cin.getline()类似,但是cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数。

5、gets()

gets 一般只用于读取字符串;
(1)gets可以接收空格,遇到回车认为输入结束;
(2)gets 可接受回车键之前输入的所有字符,并用’\n’替代 ‘\0’。回车键不会留在输入缓冲区中。
(3)gets() 读取字符串时,
语法:gets(字符数组名或指针);
(4)gets(s) 函数中的变量s为一字符串指针。如果为单个字符指针,编译连接不会有错误,但运行后内存溢出错误。
(5)gets函数可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。

6、scanf()

(1)当 scanf 从缓冲区中读取单个字符(%c)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 不会将其忽略,会读取并清除。
(2)当 scanf 从缓冲区中读取数字或字符串(非单个字符)时,若缓冲区中第一个字符是空格、tab或换行这些分隔符时,scanf 会将其忽略并清除,继续读取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的,scanf 不做处理。
(3)scanf 读取字符串时,当遇到空格、回车和Tab键都会认为输入结束。当遇到回车,空格和tab键会自动在字符串后面添加’\0’,但是回车,空格和tab键仍会留在输入的缓冲区中。(所以它不能接收包含空格、回车或Tab等的字符串)

7、getchar()

getchar()是在输入缓冲区顺序读入一个字符(包括空格、回车和Tab);注意,getchar函数只能接受单个字符,输入数字也按字符处理,输入多于一个字符时,只接收第一个字符。
(1)getchar 由宏实现:#define getchar() getc(stdin)。getchar有一个int型的返回值。当程序调用getchar时,程序就等着用户按键,用户输入的字符被存放在键盘缓冲区中,直到用户按回车为止,此时进入到输入缓冲区中(回车字符也放在缓冲区中)。
(2)当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符。getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕。
(3)如果用户在按回车之前输入了不止一个字符,其他字符会保留在输入缓冲区中,等待后续getchar调用读取。即后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值