文字列をずらす – プログラミング – Home

通知
すべてクリア

[解決済] 文字列をずらす


ねこまんじゅう
 ねこまんじゅう
(@ねこまんじゅう)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

使用環境[WindowsXP VC2005 SDK]

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

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

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

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


引用未解決
トピックタグ
επιστημη
 επιστημη
(@επιστημη)
ゲスト
結合: 22年前
投稿: 1301
 

#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
 reshia
(@reshia)
ゲスト
結合: 20年前
投稿: 117
 

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;
}


返信引用
ねこまんじゅう
 ねこまんじゅう
(@ねこまんじゅう)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

επιστημηさま reshiaさま 

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


返信引用
ねこまんじゅう
 ねこまんじゅう
(@ねこまんじゅう)
ゲスト
結合: 19年前
投稿: 10
Topic starter  

解決済みのチェックを忘れていました・・


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました