精华内容
下载资源
问答
  • C/C++读入多行字符串string
    万次阅读 多人点赞
    2016-09-30 14:11:00

      因为从流中读入数据保存到string中,string会遇到空格就停止录入。这样当我们输入一行带空格的字符串,就要考虑getline函数,从流中读入一行字符串。

    1. 读入不含空格字符串

      首先我要介绍一下标准C++字符串类string,它包含在”string”头文件中,记住不是string.h或者cstring头文件。两者头文件中都是包含对字符串数组处理的函数声明,前者标准C语言头文件,而后者是标准C++头文件,功能一样。
      因为标准C++类string的定义和处理在标准命名空间,所以还要指明限定,例如:
      using namespace std;
      std 代表标准命名空间。 :: 则是作用域运算符,在这里用于定位到std命名空间。当然也可以using std::string。

    #include<string>
    using namespace std;
    
    string str;
    cin>>str;

    2. 读入包含空格字符串

      为了简略,下面头文件和命名空间声明不再添加到程序例子中。

    2.1 读入一行字符串

      getline(istream &in,string,s)从流中读入一行字符串,直到遇到换行符。

    string str;
    getline(cin,str);

    2.2 单纯读入多行字符串

      例如读入三行字符串:

    string str[3];
    for(int i=0;i<3;i++)
        getline(cin,str[i]);

    2.3 包含其他输入后读入多行字符串

      例如一些编程题要求先输入字符串行数,然后再一行一行读入字符串。如果正常顺写编程的话,会发现第一行字符串读入的是空,后续才能正常录入每行字符串。
      这是因为第一行输入一个int数据后,换行符并没有被忽略,直接被准备读入第一行字符串的getline俘获。
      所以需要在第一行输入一个int数据后,调用cin.ignore()忽略下面的一个流录入,将其抛弃。

        int N;
        cin>>N;
        cin.ignore();  //取消换行键的读入
        string strCinLine[100];
        for(int i =0;i<N;i++)
            getline(cin,strCinLine[i]);

      或者给strCinLine动态申请空间,节省空间开销。

        int N;
        cin>>N;
        cin.ignore();  //取消换行键的读入
        string* strCinLine = new string[N];
        for(int i =0;i<N;i++)
            getline(cin,strCinLine[i]);
    
        delete []strCinLine; //记得释放动态空间
        strCinLine = NULL;

    个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

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

    更多相关内容
  • C++输入多行数字到数组 前天做某公司笔试题的时候,其输入格式是多行数字,每行以空格为分隔符,以换行符号为结束输入到多个数组。在JAVA中有相应的函数直接将一行拆成数组,感觉在C++中这中输入方式还是挺奇怪的,...
  • 里面的内容如下(一行一个字符串): 2.就可以在编译器中打开并读取其中的文件了 代码如下: #include<iostream> #include<fstream> #include<string> using namespace std; int zfc(string...

    1.建立一个文本文档(我在D盘中建立了一个记事本)地址为 d:\\zfc.txt

    里面的内容如下(一行一个字符串):

     2.就可以在编译器中打开并读取其中的文件了

    代码如下:

    #include<iostream>
    #include<fstream>
    #include<string>
    using namespace std;
    int zfc(string(&c)[20]);        //定义一个读取字符串的函数 利用引用传递参数
    int main()
    {
        int p,q;
        string c[20];              //定义string类型的数组
        p = zfc(c);                //传递参数
    	for (q = 0; q < p; q++)
    	{
    		cout << c[q] <<' ';   //输出文件中每一行的字符串,我这里用空格将,每一个字符串隔开输出
    	}
        return 0;
    }
    int zfc(string(&c)[20])
    {
    	int p=0;
    	ifstream file3; 
    	file3.open("d:\\zfc.txt");      
    	if (!file3)        //测试文件是否可以打开
    	{
    		cout << "字符串文件不能打开" << endl;
    	}
    	for (p = 0; !file3.eof(); p++)
    	{
    		getline(file3, c[p]);        //将每一行的字符串赋值给字符数组
    	}
    	return p;            //有p个字符串
    }
    

    最终的读取结果如下:

    注:

    eof() 函数用来判断前面的读语句是否读到文件结束符EOF
    

    展开全文
  • C语言多行字符串eof问题如何解决?#includevoid main(){ printf("input a sentence \n");char a[80],*p;int i=0,lowercase=0,uppercase=0,space=0,tab=0,enter=0;printf("ps: input ctrl+z to end of the input and ...

    C语言多行字符串eof问题如何解决?

    #include

    void main()

    { printf("input a sentence \n");

    char a[80],*p;

    int i=0,lowercase=0,uppercase=0,space=0,tab=0,enter=0;

    printf("ps: input ctrl+z to end of the input and press enter to show the result\n");

    printf("=====================================\n");

    while(1)

    { if((a[i]=getchar())==EOF)

    break;

    i++;

    }

    p=&a[0];

    while(1)

    {if(*p==EOF)

    break;

    if((*p>='a')&&(*p<='z'))

    lowercase++;

    else if(*p==' ')

    space++;

    else if(*p==' ')

    tab++;

    else if(*p=='\n')

    enter++;

    else if((*p>='A')&&(*p<='Z'))

    uppercase++;

    p++;

    }

    printf("=====================================\n");

    printf("lowercase %d\n",lowercase);

    printf("uppercase %d\n",uppercase);

    printf("space %d\n",space);

    printf("tab %d\n",tab);

    printf("enter %d\n",enter);

    }

    程序已经算是成功了

    可是有很多让我不爽的地方

    首先是ctrl+z必须在行首输入

    然后就是当输入ctrl+z之后 还需要输入回车才会显示结果

    高手们能不能帮忙改改

    让一旦输入ctrl+z 就能使之输出结果

    而且因为输入ctrl+z结束时需要按回车 似乎enter的统计也有问题

    古冶

    发布

    2个回答

    67b0a70febe552c922c54bb8560d6ef6.png

    精华知识

    展开全文
  • C++如何输入多行字符串(含空格)

    万次阅读 多人点赞 2014-07-10 18:58:52
    输入一个整数n,表示接下来要输入n行字符串,每一行字符串带有空格,按回车表示结束该行的输入 程序1: #include #include using namespace std; int main() { string s; int n; cin>>n; for(int i=...

    我们要实现这样的功能:

    输入一个整数n,表示接下来要输入n行字符串,每一行字符串带有空格,按回车表示结束该行的输入

    程序1:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string s;
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++)
    	{
    		cin>>s;
    		cout<<s<<endl;
    	}
    	return 0;
    }
    cin>>s不能接受空格输入


    程序2:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string s;
    	int n;
    	cin>>n;
    	for(int i=0;i<n;i++)
    	{
    		getline(cin,s);
    		cout<<s<<endl;
    	}
    	return 0;
    }
    

    程序2可以实现读入带空格的整行字符串,但只输入一行就结束了

    细心的读者可以发现,在输入的数字下边出现空行

    这是因为输入数字之后,敲回车,产生的换行符仍然滞留在输入流了,接着就被getline(cin,s)给读进去了,

    此时的s=“\n”,所以在2的后边会有一个空行

    同时for循环中的i也自增1,所以会少读一行

    要解决这个问题,就要干掉滞留在输入流中的换行符


    程序3:

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main()
    {
    	string s;
    	int n;
    	cin>>n;
    	cin.ignore();
    	for(int i=0;i<n;i++)
    	{
    		getline(cin,s);
    		cout<<s<<endl;
    	}
    	return 0;
    }
    
    这下就可以了

    可以用getchar()代替cin.ignore()

    getchar()读取输入流中的一个字符,所属头文件#include<cstdio>
    还可以将

    string s;

    getline(cin,s);

    换为:

    char ch[256];

    gets(ch);


    我们不能用scanf("%s")输入字符串,因为它碰到空格或者TAB就会停下来,可以用下述两种方法解决这个问题:

    第一种:

    fgetc(fin),读取一个打开的文件fin,读取一个字符,然后返回一个int值

    为什么返回的是int而不是char呢?

    因为如果文件结束,fgetc将返回一个特殊标记EOF,它并不是一个char

    如果把fgetc(fin)的返回值强制转换为char,将无法把特殊的EOF和普通字符区分开

    如果要从标准输入读取一个字符,可以用getchar(),它等价于fgetc(stdin)


    fgetc和getchar()将读取“下一个字符”,因此你需要知道在各种情况下,“下一个”字符是那个

    如果用scanf("%d",&n)读取整数n,则要是在输入123后多加了一个空格,用getchar()读取的将是这个空格

    如果在123后换行,则读取到的将是回车符“\n”


    第二种:

    fgets(buf,MAXN,fin)读取完整的一行放在字符数组buf中,其中buf的声明为buf[MAXN]

    这个函数读取不超过MAXN-1个字符,然后在末尾添上结束符‘\n’,因此不会出现越界的情况

    之所以说可以用这个函数读取完整的一行,是因为一旦读到回车符‘\n’,读取工作将会停止,而这个‘\n’也会是buf字符串中最后一个有效字符(再往后就是字符串结束符‘\0’了)




















    展开全文
  • C++:如何输入多行数字/字符串

    万次阅读 2019-05-20 14:04:42
    一、字符串读取多行数据 1、利用getline读取一整行(包含空格) #include <iostream> #include <string> using namespace std; int main() { string s; int n;//n个数据 cin>>n; cin.ignore...
  • C++字符串多行输入

    2019-09-24 21:04:38
     这一段代码可以进行多行字符串输入,输出的也是多行进行输出: 注意C++输入流cin和cout可以直接对字符串数组进行输出,但是不能越界。        char *p=NULL; cin>>p; 这是错误的用法; ...
  • C++以EOF结尾读取多行字符串

    千次阅读 2020-09-02 21:20:25
    - 'EOF'这个样子以EOF为结束符读取多行文本,搜了一些函数感觉都是曲线救国,不如自己从最基础的东西开始自己造。 具体操作 #include <iostream> using namespace std; int main() { char buff[1000]; int ...
  • c++中,对于普通常用的cin,对于包含空格的字符串显得有些无力感, 读入缓冲区中的字符是不会包含空格的, 对于想要包含空格的字符串,可以使用getline()函数; getline 从输入流读取字符并将它们放进 string : ...
  • C++从键盘输入多行数据

    千次阅读 2020-07-31 02:09:58
    C++从键盘输入多行数据1. scanf函数2.cin 1. scanf函数 https://blog.csdn.net/liuuze5/article/details/51098471 函数原型 int scanf(const char *format,...); 调用形式:scanf("<格式说明字符串>",<...
  • 寻求了很久关于如何在 Java 中实现多行字符串,即 Here Document。因为在测试中准备大的字符串数据是不得不用加号去拼接,甚至是麻烦。稍好就是用 http://www.htmlescape.net/javaescape_tool.html 把你输入的大段...
  • C++多行未知长度的字符串输入

    千次阅读 2019-08-23 19:13:05
    输入:首先输入数字n,表示接下来要输入字符串的行数。 然后输入n行字符串。 输出:打印这n行字符串。 #include<iostream> #include<vector> #include<string> using namespace std; int ...
  • C++读取多行数据

    2021-10-15 12:03:01
    1、读取多行字符串 #include <iostream> #include <string> using namespace std; int main() { string tt; while(getline(cin,tt)){ cout<<tt; } return 0; } 2、读取多行整数(也支持...
  • 如果要实现读取多行字符串的字符输入,那么就不可以用cin.getline,只可以将字符串分成每个字符存入字符数组 二、方法 逐个字符存入字符数组中,此时不一定要用getchar,直接存入就好了。 char ch; char s[10001]; ...
  • 1、多行输入字符串的处理 当我们输入一行带空格的字符串,就要考虑getline函数,从流中读入一行字符串。 编程题一般输入为: 1、输入字符串行数, 2、然后再一行一行读入字符串。 问题:如果正常顺写...
  • C++输入多行字符,含空格

    千次阅读 2016-10-08 16:30:59
    输入一个整数n,表示接下来要输入n行字符串,每一行字符串带有空格,按回车表示结束该行的输入 程序1: [cpp] view plain copy #include  #include  using namespace std;  ...
  • C++读写文件中的字符串 今天帮人做了个简单的作业,没想到花时间最多的不是算法而是文件的读写,还有对读入字符串的分割处理。晚上写作业的时候又用到了对字符串的处理,这里记录一下。 代码有查阅各种资料,但是...
  • string s; while(get line(cin,s)) { cout ; } 输入eof: windows——ctrl+z unix/linux——ctrl+d
  • c++输入字符串的多种方法总结

    万次阅读 多人点赞 2017-03-24 11:46:14
    c++字符串输入
  • 语言技巧——scanf读入多行字符串

    千次阅读 2020-03-24 08:45:05
    #include <bits/stdc++.h> using namespace std; int main(){ char s[100004]; scanf("%[^EOF]",&s); cout<<s; } 注意这里&s和s都可
  • 如下所示: #include #include #include #include #include using namespace std; //从文件读入到string里 string readFileIntoString(char * filename) { ifstream ifile(filename)...buf.put
  • C/C++字符串输入输出

    2022-05-04 23:47:00
    输入一行字符串,然后直接输出这行字符串本身。 样例 输入: jdjd jsdj dakijdi dwnhfj 输出: jdjd jsdj dakijdi dwnhfj 代码 #include <cstdio> const int MAXN = 51; //字符串大小 char str1[MAXN]...
  • 我们要实现这个样一个功能: 输入一个整数 n ,表示接下来要输入 n行字串,每一行字串带有空格。按回车表示结束改行的输入
  • c++中cin不能输入空格,这篇文章讲解了怎么样输入空格 http://blog.sina.com.cn/s/blog_a2ae2da90101okvc.html int main() { string s; int n; cin>>n; for(int i=0; i { getline(cin,s); cout } retu
  • 常见的输入问题: 1、直接用cin输入(当然可以使用... 一旦输入空格,cin将空格视为回车键,将会将后面的字符赋予后续有输入cin函数的变量中,如下面的a,故一定确保输入无空格!!  2)char a[10];  cin >> a;
  • 在键盘上应该五个字符一空格,还是回车
  • a = input() //一行输入一个字符 a, b, c = input().split() //一行输入多个字符 输入3行,每行N个字符法一: import sys list1 = list(map(int, sys.stdin.readline().strip().split())) list2 =...
  • #include<iostream>... 如何输入多行数据,形如: a 12 13 b 14 15 c 16 17 ... 输入的行数未知 */ void fun() { vector<string> ar; vector<string> name; vector<
  • C++输入字符串的几种方式

    千次阅读 2021-08-15 16:40:16
    C++输入字符串的几种方式 输入方式是大家都需要熟悉,如果查找输入的问题建议直接看注意事项,getline第一行读取失败的情况分析。 读取输入方式 cin<< cin.getline(str, size, dilem) // 属于istream流 cin....
  • 这里需要对输入进行控制,第一行输入多个字符串后,以回车结束,使用了getchar()来存储输入的字符,并和换行符'\n'比较。 //http://noi.openjudge.cn/ch0107/21/ #include <iostream> #include <cstdio&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 24,077
精华内容 9,630
关键字:

c++输入多行字符串

c++ 订阅