7

我是 c++ 新手。我试图编写以下代码来用新值填充数组的每个字节而不覆盖其他字节。下面的每个字节 (r) 都应在数组的新地址处相加。

int _tmain(int argc, _TCHAR* argv[]) {
    char y[80];
    for(int b = 0; b < 10; ++b) {
        strcpy_s(y, "r");
    }
}

请让我知道 C++ 中是否有任何功能可以做到这一点。在上述情况下,值 'r' 是任意的,它可以有任何新值。所以生成的字符数组应该包含值 rrrrrr... 10 次。提前非常感谢。

4

4 回答 4

18

使用 C++11

#include <algorithm>
#include <iostream>

int main() {
    char array[80];
    std::fill(std::begin(array),std::begin(array)+10,'r');
}

或者,如评论中所述,您可以使用std::fill(array,array+10,'r').

于 2013-01-21T20:43:11.673 回答
2

您可以使用[]运算符并分配一个char值。

char y[80];
for(int b=0; b<10; ++b)
    y[b] = 'r';

是的,这std::fill是一种更惯用和更现代的 C++ 方式来执行此操作,但您也应该了解[]运算符!

于 2013-01-21T20:43:12.380 回答
1
// ConsoleApp.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

int fun(bool x,int y[],int length);
int funx(char y[]);
int functionx(bool IsMainProd, int MainProdId, int Addons[],int len);
int _tmain(int argc, _TCHAR* argv[])
{
    int AddonCancel[10];

    for( int i = 0 ; i<4 ;++i)
    {
        std::fill(std::begin(AddonCancel)+i,std::begin(AddonCancel)+i+1,i*5);
    }
    bool IsMainProduct (false);
    int MainProduct =4 ; 
    functionx(IsMainProduct,MainProduct,AddonCancel,4);

}

int functionx(bool IsMainProd, int MainProdId, int Addons[],int len)
{
    if(IsMainProd)
        std::cout<< "Is Main Product";
    else
    {
        for(int x = 0 ; x<len;++x)
        {
          std::cout<< Addons[x];
        }
    }

    return 0 ; 
}
于 2013-01-21T22:13:37.637 回答
0

选项 1:在定义时初始化数组。便于初始化少量值。优点是可以声明数组const(此处未显示)。

char const fc = 'r';   // fill char
char y[ 80 ] = { fc, fc, fc, fc,
                 fc, fc, fc, fc,
                 fc, fc };

选项 2:经典 C

memset( y, y+10, 'r' );

选项 3:经典(C++11 之前)C++

std::fill( y, y+10, 'r' );
于 2013-01-21T20:58:44.643 回答