• C/C++ 字符串输入输出


    一、C语言
    (一)
    1 #include<stdio.h>
    2 void main()
    3 {
    4 char s[20];
    5 scanf("%s",s);
    6 printf("%s\n",s);
    7 }

    (二)
    1 #include<stdio.h>
    2 void main()
    3 {
    4 char s2[20];
    5 gets(s2);
    6 puts(s2);
    7 }
    注:下面测试中 a 与 b 一样
     1 #include <stdio.h>
    2 void main()
    3 {
    4 char a[5]={"abcd"}; //最后一位存储的是'\0'
    5 puts(a);
    6 char b[5];
    7 b[0]='a';
    8 b[1]='b';
    9 b[2]='c';
    10 b[3]='d';
    11 b[4]='\0'; // '\0'的ASCII编码是 0
    12 puts(b);
    13 }
    二、C++ 标准类库
    (一)
     1 #include <iostream>
    2 #include <string>
    3 using namespace std;
    4 void main()
    5 {
    6 string str; //C++类 对象;不能用scanf printf输入输出
    7 cin>>str;
    8 cout<<str<<endl;
    9 return;
    10 }

    注:
    (1)所谓namespace,是指标识符的各种可见范围。C++标准程序库中的所有标识符都被定义于一个名为std的namespace中。
    这样命名空间std内定义的所有标识符都有效(曝光)。就好像它们被声明为全局变量一样。
          // one.h
      class String { ... };
      // somelib.h
      class String { ... };
      如果按照上述方式定义,那么这两个头文件不可能包含在同一个程序中,因为String类会发生冲突。
      所谓命名空间,是一种将程序库名称封装起来的方法,它就像在各个程序库中立起一道道围墙。
    (2)<iostream>和<iostream.h>和格式不一样:
    C++标准为了和以前的C++代码(伪标准库)区别开,也为了正确使用命名空间,规定头文件不使用后缀.h。当使用< iostream>的时候,该头文件没有定义全局命名空间,必须使用namespace std,这样才能正确使用cout。
    后缀为.h的头文件c++标准已经明确提出不支持了,当使用<iostream.h>时,相当于在c中调用库函数,使用的是全局命名空间,也就是早期的c++实现。
     
    (二)
    1 #include <iostream>
    2 using namespace std;
    3 void main()
    4 {
    5 char a[20];
    6 //C++标准库提供了专有的字符串类型string。必要时再用字符数组作为字符串,因为字符数组限定了输入字符串的长度
    7 cin>>a;
    8 cout<<a<<endl;
    9 }
     
    三、错误:
    (一)
    1 #include<stdio.h>
    2 void main()
    3 {
    4 char *s;
    5 //一个未初始化的,可存储char型地址的变量。
    6 scanf("%s",s);
    7 }

    (二)
     1 #include<stdio.h>
    2 void main()
    3 {
    4 char s[20];
    5 scanf("%s",s);
    6 printf("%s\n",*s);
    7 //*s相当于s[0],返回一个char型字符。
    8 //正确:
    9 printf("%s\n",s);
    10 }
    四、很不合适的用法
    1 #include<stdio.h>
    2 void main()
    3 {
    4 char *a=new char();
    5 //只申请了存储一个char类型的空间,却用来存储一个字符串(尽管这样用没有错误)
    6 scanf("%s",a);
    7 printf("%s\n",a);
    8 }
  • 相关阅读:
    pacx & zr(yet)
    FileInputStream RandomAccessFile FileChannel 与 MappedByteBuffer (yet)
    结合自定义注解的 spring 动态注入
    redis事务与管道区别
    jdk动态代理与cglib优势劣势以及jdk动态代理为什么要interface
    maven scope属性值设置含义
    xc (yet)
    单链表 环
    适配器模式,将老接口的数据给新接口用
    移动硬盘无法拷贝大于4G的文件
  • 原文地址:https://www.cnblogs.com/windlaughing/p/2415651.html
Copyright © 2020-2023  润新知