ViVi Home > 技術文書 > ポインタ入門 > 基礎演習問題> push_front


 

 

C/C++ ポインタ入門 > 文字列関数 > push_front
Nobuhide Tsuda
Nov-2013

文字列先頭に文字を追加:void my_push_front(char *str, char c)

#include <string.h>        // for strlen
void my_push_front(char *str, char c)
{
    if( c == '\0' ) return;
    const int len = strlen(str);
    for(int i = len; i >= 0; --i) {
        str[i+1] = str[i]; //  文字列を1文字後ろにずらす
    }
    *str = c;      // 先頭に1文字挿入
}

解説:

void my_push_front(char *str, char c)
{
    if( c == '\0' ) return;
    char *ptr = str;
    while( *ptr++ != '\0' ) {     // ptr をヌル文字の次まで進めます
    }
   while( ptr != str ) {
        *ptr = *(ptr - 1);    // 1文字ずらす
        --ptr;
   }
    *str = c;      // 先頭に1文字挿入
}

解説:

void my_push_front(char *str, char c)
{
    if( c == '\0' ) return;
    for(;;) {
        char t = *str;      //  現在位置文字を t に保存
        if( (*str++ = c) == '\0' )    // 文字を挿入
            return;            //  ヌル文字を挿入したら終わり
        c = t;                   // 保存した文字を次に挿入する文字(c)に代入
    }
}

解説:

 


前: | 次: