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」は任意であり、これは任意の新しい値を持つことができます。そのため、結果の文字配列には値 rrrrr... が 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';

はい、これを行うためのより慣用的で最新の C++ の方法ですが、演算子std::fillについても知っておく必要があります。[]

于 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 に答える