对角表示用户输入的字符串

时间:2015-02-27 02:57:16

标签: c++

我目前有点陷入困境。我需要用c ++编写一个程序,允许用户输入一个字符串(任意长度,任意数量的空格),然后程序需要对角表示。我可以让它工作,但仅限于第一个单词,而不是在第一个单词后输入的任何单词。您可以在下面找到我的代码。

谢谢大家!

#include <iostream>
#include <string>

using namespace std;

int main()
{
    string strHello;
    cin >> strHello;

    for(int k = 0; k < strHello.length(); k++)
    {
        for (int x = 0; x <= k; x++)
        {
            if (k==x)
                cout << strHello.at(x);
            else
                cout << " ";
        }
        cout << '\n';
    }
    return 0;
}

5 个答案:

答案 0 :(得分:2)

是的问题与其他人提到的一样,>>操作员停止阅读找到的第一个空格字符,因此std::getline()完成工作,并且您不需要嵌套循环,看看这个

#include <iostream>
#include <string>

using namespace std;

int
main(void)
{
    string text;
    string spaces;

    getline(cin, text);

    for (int k = 0 ; k < text.length() ; ++k)
        cout << (spaces += ' ') << text.at(k) << endl;

    return 0;
}

答案 1 :(得分:1)

问题在于您的输入,而不是您的输出。问题是你只能打电话

cin >> strHello;

一次。这只读取第一个非空白字符序列,这些字符由任意数量的{空格,输入开始,输入结束}分隔。因此,您的程序只会读取任何输入的第一个这样的序列,并丢弃输入中的任何空格。

答案 2 :(得分:1)

cin >>将以空白字符分隔输入字符串。您应该使用getline()代替。

getline(cin,strHello);

答案 3 :(得分:1)

使用getline,例如

std::getline(cin, strHello);

cin将只读取它在空格之前看到的第一个字符串。例如“你好世界”只会在strHello中打招呼。

答案 4 :(得分:0)

这是一个我认为有用的程序:

#include <iostream>
#include <string>
#define MAX_LEN 100
using namespace std;

int main()
{
    char strHello[MAX_LEN] = { 0 };
    cout << "Enter a string";
    cin.getline(strHello, MAX_LEN);
    for (int k = 0; k < sizeof(strHello); k++){
        for (int x = 0; x <= k; x++){
            if (k == x)
                cout << strHello[x];
            else
                cout << " ";
        }
        cout << '\n';
    }
    return 0;
}