使用getchar()获取字符串
在C/C++中,输出printf或cout可以输出数字、字符、字符串。但是输入函数scanf和cin在输入字符串时遇空格便会停止,带来不少的麻烦。
#include <iostream> #include <string.h> #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 <string.h> #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; }样例输出: