C言語関係掲示板

過去ログ

No.1240 入力した文字を左右の端から一文字になるまで交互に消すプログラム

[戻る] [ホームページ]
No.2312

文字の消去の発展型。
投稿者---DRAGONIC(2004/07/18 11:55:29)


初めまして。
現在私は文字の消去について悩んでいます。
入力した文字を左右の端から一文字になるまで交互に消すプログラムなのですが。
プロトタイプや多重繰り返しなど行ったのですが、見当違いな結果ばかりでした。
文字の消去は、


char word[n];
int x;
printf("Word:");
scanf("%s",word);

for(x=n;n == 1;n--)



という具合で想定できるのですが、交互に消すにはどうすればよいのかは具体案が浮かびません。
助言をお願いいたします。


No.2313

Re:文字の消去の発展型。
投稿者---monkey(2004/07/18 13:54:01)


こんなのはいかが?
    char word[256];
    int len;
    int right = 1;

    printf( "Word:" );
    scanf( "%s", word );

    for( len = "word"の文字列長; len > 1; len = "word"の文字列長 )
    {
        if( right )
        {
            // "word"の右端を1文字消す
        }
        else
        {
            // "word"の左端を1文字消す
        }
        printf( "%s\n", word );
        right = !right;
    }



No.2314

Re:文字の消去の発展型。
投稿者---円零(2004/07/18 14:57:00)


>文字の消去は、
>・
>・
>char word[n];
>int x;
>printf("Word:");
>scanf("%s",word);
>
>for(x=n;n == 1;n--)
>・
>・
>・
>という具合で想定できるのですが、交互に消すにはどうすればよいのかは具体案が浮かびません。

条件式が n == 1っておかしくないですか?
それに、for文の初めのとこだけ書いて「という具合」といわれても、
どういう具合なんだかさっぱりわからないですよ。

私は関数のポインタでも使ってみてはどうかと思いましたが…
#include <stdio.h>
#define MAXLENGTH 256

void cutleft(char *s, int width);
void cutright(char *s, int width);
void (*cutter[2])(char *, int) = {cutleft, cutright};

int main(void){
    char word[MAXLENGTH];
    int right = 1;
    printf("Word:\n");
    scanf("%s", word);

    while(word[0]){
        cutter[right](word, 1);
        printf("%s\n", word);
        right = !right;
    }
    return 0;
}

void cutleft(char *s, int width){
    char buf[MAXLENGTH];
    if( width > strlen(s) )s[0] = '\0';
    else{
        strcpy(buf, &s[width]);
        strcpy(s, buf);
    }
}

void cutright(char *s, int width){
    if( width > strlen(s) )s[0] = '\0';
    else s[strlen(s) - width] = '\0';
}




No.2315

Re:文字の消去の発展型。
投稿者---monkey(2004/07/18 16:01:25)


> 私は関数のポインタでも使ってみてはどうかと思いましたが…

なるほど,それも一興ですね^^
前回投稿の後,別案を思いつきました.ご参考までに.
#include <stdio.h>
#include <string.h>
#define MAX 256

int main()
{
    char word[MAX];
    char buff[MAX];
    int len, i;

    printf( "Word:");
    scanf( "%s", word );

    for( len = strlen( word ), i = 0; len > 1; --len, ++i )
    {
        strncpy( buff, word + i % 2, len - 1 );
        *( buff + len - 1 ) = '\0';
        strcpy( word, buff );
        printf( "%s\n", word );
    }
    return 0;
}



No.2318

Re:文字の消去の発展型。
投稿者---あかま(2004/07/18 20:48:36)


あんまり深く考えずに。
#include <stdio.h>
#include <string.h>
int main(){
    char str[256];
    char *last,*top;
    
    scanf("%s",str);
    
    top = str;
    last = str+strlen(str);
    
    while(1){
        top++;
        printf("%s\n",top);
        if(top >= last) break;
        
        *--last = '\0';
        printf("%s\n",top);
        if(top >= last) break;
    }
    
    return 0;
}