-2

を持っていて、余分なメモリやを使用せずに、その場でchar* word = "abaradasaddragfavvdavgasbga00rarcrawabr0ac0ra0ra0vra0" すべてを削除したいとします。どうすればいいですか?したがって、出力は次のようになります。 **私が試したこと**:'0' charswordmemmove"abaradasaddragfavvdavgasbgararcrawabracraravra"

void removeZeros( char* word) {

   int size = strlen( word );
   int i;
   for( i = 0; i < size; i++ ){
         if( word[i] == '0' ){
             word[ i ]  = word[ i + 1 ];
             i++;
         }
   }
}

*ルール**:

  • 所定の場所で行う必要があります
  • memmoveまたはのような組み込み関数を呼び出さないでくださいremove
  • 余分なメモリを使用しないでください
  • 別の変数に割り当てないでください
4

3 に答える 3

4
#include <algorithm>
#include <iostream>
using namespace std;

int main()
{
    char word[] = "abaradasaddragfavvdavgasbga00rarcrawabr0ac0ra0ra0vra0";

    int size = strlen( word ) + 1;

    std::remove(word, (sizeof(char) * size) + word, '0');
    std::cout << word;

}
于 2012-09-21T23:35:46.153 に答える
3

文字列を最初から最後まで繰り返します。見つけた0ごとに、オフセットと呼ばれる整数をインクリメントします。0以外の文字ごとに、オフセットの現在の値だけ下に移動します。必ず最後にヌルバイトを入れてください。

于 2012-09-21T23:33:10.830 に答える
3
// this assumes your variable word is really a cstr and is NULL terminated
// also, it assumes that it's not in read only memory space like your small
// example shows but is actually in-place writeable
char* write_position = word;
char* scan_position = word;
for( ; *scan_position != '\0'; scan_position++ ) {
  if( *scan_position == '0' ) continue;
  *(write_position++) = *scan_position;
}
*write_position = '\0';
于 2012-09-21T23:47:30.097 に答える