文字列をずらす

[戻る]
ねこまんじゅう 2006/06/17(土) 16:24:44
使用環境[WindowsXP VC2005 SDK]

char str[6] = {'0','1','\0','2','3','\0'}

↑こういう配列の中身を、↓このように最初の\0の次の値(2)までずらしたいのです。

str[6] = {'2','3,'\0'}


何かいい方法はありますでしょうか・・・。

επιστημη 2006/06/17(土) 16:47:55
#include <iostream>
#include <algorithm>

int main() {
  const int N = 6;
  char str[N] = {'0','1','\0','2','3','\0'};
  char* pos = std::find(str, str+N, '\0'); // '\0'を見つけて
  std::copy(++pos, str+N, str); // その次から末端までを先頭にコピー
  std::cout << '[' << str << ']' << std::endl;
  return 0;
}

reshia 2006/06/17(土) 17:41:56
C++を使わないなら、memcpyを使って下のように。
(コピー先とコピー元の領域が重なることがあるなら
 memcpyをmemmoveに置き換えてください)

//-----
#include <stdio.h>
#include <string.h>

int main(void)
{
    int i;
    char str[6] = {'0','1','\0','2','3','\0'};

    // ナル文字の位置を探る
    for (i = 0; i < 6; i++) {
        if (str[i] == '\0') break;
    }
    i++;

    // ナル文字以降の文字列をずらす。
    memcpy(str, str+i, (6-i)*sizeof(char));

    // 確認
    for (i = 0; i < 6; i++) {
        printf("[%d] %c\n", i, str[i]);
    }

    return 0;
}

ねこまんじゅう 2006/06/17(土) 18:42:56
επιστημηさま reshiaさま 

すぐにそういうコードが書けて、うらやましい限りです。
おかげさまで、実装できました。
どうもありがとうございました!

ねこまんじゅう 2006/06/20(火) 23:55:51
[[解決]]
解決済みのチェックを忘れていました・・

古いスレッドには追加発言できません。