使用getchar获取字符串

时间:2024-10-21 09:30:40

在C/C++中,输出printf或cout可以输出数字、字符、字符串。但是输入函数scanf和cin在输入字符串时遇空格便会停止,带来不少的麻烦。

#include <iostream>
#include <>
#include <cstdio>
using namespace std;


int main()
{
    char c;
    char s[200];
    int i = 0;
    cin >> s;
    cout <<s<<endl;
    return 0;
}

 

输入 i love you
输出 i

如果为们想获取一段有空格的字符串scanf或cin便不起作用了,这时一般推荐gets函数,不幸的是报错:

'gets' is deprecated [-Wdeprecated-declarations] gets在新版的编译器中一般认为是危险的。

我们可以使用getchar()获取这样的字符串,需要注意的是getchar()连回车符都会读取。因此对字符串“i love you”,getchar()读取了11个字符(算上执行的回车符)。

 

#include <iostream>
#include <>
#include <cstdio>
using namespace std;


int main()
{
    char c;
    char s[200];
    int i = 0;
    while(true)
    {
        c  = getchar();
        if (c == '\n') //防止回车符加入到s[]中
            break;
        s[i++] = c;
    }
    cout <<s<<endl;
    return 0;
}

 

 例题:

描述

Julius Caesar曾经使用过一种很简单的密码。对于明文中的每个字符,将它用它字母表中后5位对应的字符来代替,这样就得到了密文。比如字符A用F来代替。如下是密文和明文中字符的对应关系。

密文
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

明文
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U

你的任务是对给定的密文进行解密得到明文。

你需要注意的是,密文中出现的字母都是大写字母。密文中也包括非字母的字符,对这些字符不用进行解码。

输入
一行,给出密文,密文不为空,而且其中的字符数不超过200。
输出
输出一行,即密文对应的明文。
样例输入
NS BFW, JAJSYX TK NRUTWYFSHJ FWJ YMJ WJXZQY TK YWNANFQ HFZXJX
样例输出
IN WAR, EVENTS OF IMPORTANCE ARE THE RESULT OF TRIVIAL CAUSES

#include <iostream>
#include <string.h>
#include <cstdio>
using namespace std;

char decode(char c)
{
   if (c >= 'F' && c <= 'Z')
   {
        return (c - 5);
   }
    else if (c >= 'A' && c < 'F')
    {
        return c + 21;
    }
    else 
        return c;
}

int main()
{
    char c;
    char s[200];
    int i = 0;
    while(true)
    {
        c  = getchar();
        if (c == '\n')
            break;
        s[i++] = decode(c);
    }
    cout <<s<<endl;]
return 0; }

 样例输出: