上一篇已经讲了有关单个字符串的处理问题,这一篇将重点介绍多个字符串的输入方式以及相关函数的使用,还将介绍二维字符数组的输入输出。
这是上一篇的内容,如有需要可以查看:
多个字符串的输入
多个字符串的输入方式和单个字符串没有太大的区别,只是输入时参数变为两个:
C语言:scanf ( "%s%s" ,a,b )
C++:cin>>a>>b
看似没有什么特别的地方。但是这里有一个需要考虑的问题:编译器怎么区分输入的是两个字符串。换言之输入时什么符号作为这两个字符串的间隔?
将这个代码稍加改进,可以做以下的探究:
char a[20],b[20],c[20],d[20];
/* C++方式 */
cin>>a>>b; //输入 ab cd(中间有空格)
cout<<a<<'#'<<b<<endl; //输出 ab#cd
/* C方式 */
scanf("%s%s",c,d); //输入 mn pq(中间有空格)
printf("%s#%s",c,d); //输出 mn#pq通过这一段代码我们可以清晰地看到作为分隔符的这个字符就是空格(当然回车也可以,但在这里不做讨论),也就是说使用cin和scanf(一般情况下)从键盘上输入的字符串不会读入空格,空格在此处是一个分隔符而不是输入串中的合法字符。
为了读入空格,除了对cin和scanf进行高级设置之外,还可以使用这几个可以读入空格的函数:
| gets_s | vs2019/22中可使用 |
| gets | Dev C++中可以使用 |
| fgets | vs和Dev中都可以使用 |
下面就是对这几个函数使用方法的详细介绍:
gets_s(VS)
在gets_s函数中,字符串输入结束的标志只有回车。可以操作下面的示例代码:
/* 注意:只能在VS编译器中编译 */
char m[20],n[20];
gets_s(m);
gets_s(n);
cout<<m<<endl<<n<<endl;
//输入两个中间含空格的字符串,并用回车间隔,输出一样的字符串(含空格)可以读取空格就是 gets_s 函数神奇的地方。同时输入时也要注意,输入的字符个数应当严格小于数组长度。因为串方式输入后面会附带一个隐式尾零,所以需要留下部分空间。、
gets(Dev C++)
使用方法和 gets_s 完全相同,同时也要注意输入个数的问题,在dev中运行。
fgets(VS / Dev C++)
标准函数语句:fgets ( 字符数组名,最大长度,stdin )
fgets 与 gets 和 gets_s 的最大区别就是回车的读取。当连续利用两个 fgets 读入字符串时,输出会多两个换行,因为此处换行虽然具有结束字符串输入的作用,但是也会被 fgets 读入。
二维数组的输入输出
二维数组的输入输出使用和一维数组完全相同的方式。需要注意的是,二维数组双下标表示元素(实现逐个输入输出),单下标表示一维数组(实现串方式输入输出)。