C/C++编程题开头字符串、数据输入几种写法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/FX677588/article/details/52606507

1、题设

  在IT公司编程题中,多数会让你一并写上测试数据输入和结果输出的Demo,这也是程序员基本的功底。想一想如果连自己的测试数据都无法给入,后面的算法写的再好,也无法测试它的准确性和效果。下面分别从c、c++,以及字符串输入和数组输入,来谈谈几种常见写法。

2、程序分析

   2.1 正常字符串输入 

   2.1.1 C语言做法

    一个不包括空格的字符串写法很简单,不再赘述,下面直接上程序:
         char nzArr[100];
         scanf("%s",nzArr);	
        或者动态分配地址,不用字符串数组,但记得在最后释放空间:
  (记得添加头文件,malloc函数接口是声明在stdlib.h头文件中)
         char *nzArr1 = (char*)malloc(100*sizeof(char));  //分配100个保存char类型数据空间
         scanf("%s",nzArr1);
                  ... ... 

           free(nzArr1);

  这两种都行,如果题目没让先输入具体字符串长度,可以使用第一种字符串数组,简单,申请空间视情况而定。但是如果题设让先输入字符串长度,然后下一行输入一行字符串,第二组更省内存和好理解,即: 

	int nLen;
	scanf("%d",&nLen);
	char *nzArr1 = (char*)malloc(nLen*sizeof(char));
	scanf("%s",nzArr);	
  注:使用VS调试的朋友一定需要注意,标准scanf和printf函数接口是声明在stdio.h中,但是在VS可能因为内嵌其它标准库中原因,你未添加stdio.h头文件也能运行,但是gcc编译环境不添加会直接报错。所以自己无论什么时候调试,最好加上stdio.h头文件。

      2.1.2 C++做法

      C++其实更多的输入和输出是从流的角度去考虑,也不再细说,直接看程序:

      
       char nzArr[100];
       int nLen;
       cin>>nLen;
       char *nzArr1 = (char*)malloc(nLen*sizeof(char));
       cin>>nzArr;
       cin>>nzArr1;
        但是需要记住头文件#include<iostream>,#include<cstdlib>,以及命名空间using namespace std。这样cin和cout才能被编译器找到和识别。
        这块细心的朋友可能发现,我前后写malloc所声明的头文件不一样。c中是stdlib.h,而c++中是cstdlib。这主要是c++像c兼容,为了以示区别,c++库头文件都将.h的头文件名修改成了c开头文件名。这样的还有如math.h和cmath。实质是一样的,因为兼容性,在c++中,你添加stdlib.h也能找到对应函数的声明。所以c和c++慢慢的已经融合到一起使用。

   2.2 输入一段字符串语句

     这里我不再区分c和c++的写法,上面已说明。这里直接进入正题,有些编程题让你输入一段字符串语句保存在字符串数组中,而且并没告诉你包含多少字符,以及还包含空格。所以这里就不能简单的像上面那样去处理了。因为保存一个字符串会在空格处断开,后面直接舍弃。如果用流的方式读入,这就设计申请二位字符串数组,很麻烦。
      这里我们需要调用流读入一整行的方式,具体程序如下:

       char nzArr[100];
       cin.getline(nzArr,100);//当换行后获得流中100个字符,如果没有提前加上字符串结束符'\n'。
          如果想知道自己输入了多少个字符(包括空格),可以调用计算字符串长度的函数:         

       #include<cstring>
       //或者#include<string.h>,但是不可以<string>,这是另外一个头文件,以后再详细描述
       int nLen = strlen(nzArr);
          strlen计算字符串长度是到结束符'\n'为止,所以与你开始保存的字符串申请空间大小无关。上面也是一样,也可以调用该函数计算字符串长度。

      2.3 数字数据输入

        数字数据获得就简单一些,一次一次从流中读入即可。也是一样,这里我不在分c和c++讲解,与上文一样。一般输入数字数据,会让你先输入数据个数,然后另起一行,隔个空格输入一个数据。具体程序实现如下:

      int nLen;
      cin>>nLen;
      int nArr[100];
      //或者动态申请地址也是一样。
      for(int i=0; i<nLen;i++)
      {
         cin>>nArr[i];
         //或者scanf("%d",&nArr[i]);
       }
           你只需要每隔一个空格输入一个数据即可,当你输入完成换行,for语句会依次从流中读入你输入的每个数据。哪怕你输入超过nLen,它也只读取前nLen个。

      转载请注明出处:CSDN 无鞋童鞋。



猜你喜欢

转载自blog.csdn.net/FX677588/article/details/52606507