如何使用\ n作为分隔符输入字符串数组?

时间:2018-04-01 20:40:19

标签: c++

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int i=0;
    char a[100][100];
    do { 
        cin>>a[i];
        i++;
    }while( strcmp(a[i],"\n") !=0 );


    for(int j=0;j<i;i++) 
    {
        cout<<a[i]<<endl;
    }
    return 0;
}

在这里,我想退出do while循环,因为用户点击进入。但是,代码不会出现循环..

3 个答案:

答案 0 :(得分:1)

以下内容读取一行并将其拆分为空白区域。这段代码不是人们通常期望初学者从头开始编写的。但是,在Duckduckgo或Stackoverflow上搜索会发现这个主题有很多变化。编程时,要知道您可能不是第一个需要所需功能的人。工程方式是找到最好的并从中学习。研究下面的代码。从一个小例子中,您将学习getline,string-stream,迭代器,copy,back_inserter等。真便宜!

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <iterator>
#include <vector>
int main() {

    using namespace std;
    vector<string> tokens;
    {
        string line;
        getline(cin, line);
        istringstream stream(line);
        copy(istream_iterator<string>(stream),
            istream_iterator<string>(),
            back_inserter(tokens));
    }

    for (auto s : tokens) {
        cout << s << '\n';
    }
    return 0;
}

答案 1 :(得分:0)

您可以使用getline来读取ENTER,在Windows上运行:

//#include<bits/stdc++.h>
#include <iostream>
#include <string> // for getline()
using namespace std;

int main()
{
    int i = 0;
    char a[100][100];
    string temp;
    do {
        getline(std::cin, temp);
        if (temp.empty())
            break;
        strcpy_s(a[i], temp.substr(0, 100).c_str());
    } while (++i < 100);


    for (int j = 0; j<i; j++)
    {
        cout << a[j] << endl;
    }
    return 0;
}

虽然每个getline都会得到整行,但“hello world”会被读取一次,你可以拆分它,只需看this post

答案 2 :(得分:0)

首先,我们需要读取直到“\ n”字符的行,我们可以使用getline()。提取运算符>>在这里不起作用,因为它也会在到达空间时停止读取输入。获得整行后,我们可以将其放入stringstream并使用cin >> strgetline(cin, str, ' ')来阅读各个字符串。

另一种方法可能是利用提取运算符将分隔符留在流中的事实。然后,我们可以使用cin.peek()检查它是否是'\ n'。

以下是第一种方法的代码:

#include <iostream> //include the standard library files individually
#include <vector>   //#include <bits/stdc++.h> is terrible practice.
#include <sstream>

int main()
{
    std::vector<std::string> words; //vector to store the strings
    std::string line;
    std::getline(std::cin, line); //get the whole line
    std::stringstream ss(line); //create stringstream containing the line
    std::string str;
    while(std::getline(ss, str, ' ')) //loops until the input fails (when ss is empty)
    {
        words.push_back(str);
    }
    for(std::string &s : words)
    {
        std::cout << s << '\n';
    }
}

对于第二种方法:

#include <iostream> //include the standard library files individually
#include <vector>   //#include <bits/stdc++.h> is terrible practice.

int main()
{
    std::vector<std::string> words; //vector to store the strings
    while(std::cin.peek() != '\n') //loop until next character to be read is '\n'
    {
        std::string str; //read a word
        std::cin >> str;
        words.push_back(str);
    }
    for(std::string &s : words)
    {
        std::cout << s << '\n';
    }
}