C++读取数组中每3个元素

5
我正在处理一个项目,希望能够按顺序打印出字符串数组中每3个元素。例如,如果字符串是“cadgfacbda”,那么我想在控制台中打印:

**"cad gfa cbd a"**

这是代码:

        string str("cadgfacbda");
        for(int i = 0 ; i < 3 ; i++)
        {
            for(int j = i ; j <  str.size() ; j +=3 )
            {
               cout << str[j]<<" ";
            }
        cout<<endl;
    }

但我得到的是:

c g c a

a f b

d a d

以上内容与IT技术无关。

5
你已经接近成功了,请查看你增加 i 和 j 的地方。 - SpamBot
我该怎么说呢..? - Reznicencu Bogdan
单个for循环有什么问题吗? - barak manos
7个回答

6

只在一个循环中编写代码:

string str("cadgfacbda");
for(int i = 0 ; i < str.size() ; i++) {
   if(i && i%3==0)
      cout<<" ";
   cout << str[i];
}
cout<<endl;

4
我认为应该是这样的:

我认为应该是这样的:

        string str("cadgfacbda");
        for(int i = 0 ; i < str.size() ; i++)
        {
            cout << str[j]<<" ";
            if( i % 3 == 0 )
                cout<<endl;
        }

当然,假设你需要在每三个元素之后换行。如果你只需要空格,那么你可以尝试使用这个方法:
        string str("cadgfacbda");
        for(int i = 0 ; i < str.size() ; i++)
        {
            cout << str[j];
            if( i % 3 == 0 )
                cout<<" ";
        }

3
int main()
{
    typedef std::string::size_type size_type;

    std::string str("cadgfacbda");

    const size_type STEP_SIZE = 3;

    for(size_type i = 0 ; i < str.size() ; i+=STEP_SIZE)
    {
        std::cout << str.substr(i, STEP_SIZE) << " ";
    }

    std::cout << std::endl;

    return 0;
}

你能详细说明一下这不是我的答案的复制吗? - Floris Velleman
因为你的答案在全球范围内并不是那么独特 :).我也在解决这个问题,在你回答之前,我已经贴出了我的答案。 - nature1729

2
这应该可以运行:
    string str("cadgfacbda");
    for(int i = 0 ; i < str.size() ; i++)
    {   
        if(i % 3 == 0 && i != 0) cout << " ";
        cout << str[i];
    }
    cout << endl;

2
#include<stdio.h>
#include<string.h>
#include<string>
int main()
{
string str("cadgfacbda");
char arr[]=str.to_char();
for(int i=1;i<=strlen(arr);i++)
{
    printf("%c",arr[i-1]);
    if(i%3==0)
    {
        printf(" ");
    }

}
}

1
考虑到问题中使用了 std::stringstd::cout,为什么要使用 printf()char arr[]?在这种情况下,str.size()std::cout 可以完成相同的任务。 - Floris Velleman

2
这也应该可以工作:
int main() 
{

    std::string str = "cadgfacbda";

    for (int i = 0; i < str.length()-3; i++)
    {
        for (int j = 0; j < 3; ++j)
        {
            if ((3 * i + j) < str.length())
                std::cout << str[3 * i + j];
        }
        std::cout << " ";
    }

    return 0;
}

2
有点晚了,但您可以使用substring函数进行截取。
std::string str("cadgfacbda");

for (std::size_t i = 0; i < str.size(); i += 3) {
    std::cout << str.substr(i, 3) << " ";
}

这可以节省大量代码,而且在我看来更易读。 实时示例

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接