掲示板利用宣言

 次のフォームをすべてチェックしてからご利用ください。

 私は

 題名と投稿者名は具体的に書きます。
 課題の丸投げはしません。
 ソースの添付は「HTML変換ツール」で字下げします。
 返信の引用は最小限にします。
 環境(OSとコンパイラ)や症状は具体的に詳しく書きます。
 返信の付いた投稿は削除しません。
 マルチポスト(多重投稿)はしません。

掲示板2

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧

No.27316

数列から文字列への変換(文字)について
投稿者---クロ(2006/06/25 15:36:27)


#include<stdio.h>

void main()
{
    int i;

    printf("%d\n",'a');

    i = 'a';

    printf("%c\n",i);


}


↑だとaを数字に直して、数字から文字を表示させています。
質問:数字から文字列を表示されると言うことを出来ますでしょうか?
私的に、簡単ながら↓のような考えが出ました。

#include<stdio.h>
#include<stdlib.h>

void main()
{
    char str[] = "abc";
    int i;

    printf("%d\n",str);

    i = atoi(str);

    printf("%s\n",i);


}

これだと、実行した時に、abcとは表示されず、NULLと表示されてしまいます。
又、i = str; だと、strのポインタが渡ってしまいます。
どうにかして、文字列(文字)→数字→文字列(文字)に戻す方法はないのでしょうか?

ご教授お願い致します。


この投稿にコメントする

削除パスワード

発言に関する情報 題名 投稿番号 投稿者名 投稿日時
<子記事> Re:数列から文字列への変換(文字)について 27319 Blue 2006/06/25 16:25:26
<子記事> Re:数列から文字列への変換(文字)について 27326 shu 2006/06/25 17:27:06


No.27319

Re:数列から文字列への変換(文字)について
投稿者---Blue(2006/06/25 16:25:26)


> "abc"
は数値としてどのような値を望んでいるのでしょうか?


それと、printfで指定できる書式指定文字には適切な型を指定すべきです。
>     printf("%d\n",str);
このような指定は普通しない。
ポインタの値を表示するときは
printf( "%p\n", ( void* )str );
とする。

>     printf("%s\n",i);
i は数値型であるので、%sで表示は普通はできない。




この投稿にコメントする

削除パスワード

No.27321

Re:数列から文字列への変換(文字)について
投稿者---クロ(2006/06/25 16:52:21)


>> "abc"
>は数値としてどのような値を望んでいるのでしょうか?
数値ですか?実際には文字列ですが、int型に置き換えできないかと思っております。

>それと、printfで指定できる書式指定文字には適切な型を指定すべきです。
>printf( "%p\n", ( void* )str );
ポインタとはしたくないのですが。
あくまでもそんな感じではないのかなと思って書き込みしました。
ご指摘ありがとうございます。

質問の記載が悪いと思いますが、ご教授お願い致します。


この投稿にコメントする

削除パスワード

No.27322

Re:数列から文字列への変換(文字)について
投稿者---επιστημη(2006/06/25 17:01:12)


>>> "abc"
>>は数値としてどのような値を望んでいるのでしょうか?
>数値ですか?実際には文字列ですが、int型に置き換えできないかと思っております。

いや、だから、文字'a'は65になりますが、文字列"abc"はどうなって欲しいか? と訊いてらっしゃいます。




この投稿にコメントする

削除パスワード

No.27323

Re:数列から文字列への変換(文字)について
投稿者---iijima(2006/06/25 17:02:12)


>>> "abc"
>>は数値としてどのような値を望んでいるのでしょうか?
>数値ですか?実際には文字列ですが、int型に置き換えできないかと思っております。

Blueさんと同じ質問ですが、"abc"をどのような値(もしくは文字列)に
置き換えたいのでしょうか。
それを明らかにしない限り、先には進めません。


この投稿にコメントする

削除パスワード

No.27330

Re:数列から文字列への変換(文字)について
投稿者---クロ(2006/06/25 17:36:55)


>>>> "abc"
*その値を文字列に直せるなら、どのような値でもかまいません。

↓の用にint a[]型を使用すると、出来ると思うのですが、出来るだけ、配列を使わなくても、簡単にできますか?
(簡単にソースを書いたので間違いがあると思います)


char *ptr;
char str[] = "abc";
int a[10] = {0};
int i = 0;

ptr = str;

for(; ptr != NULL; ptr++){
    a[i] = *ptr;
    i++;
}

a[i] = NULL;

for(i = 0; a[i] != NULL;i++)
printf("%c",a[i]);




この投稿にコメントする

削除パスワード

No.27331

Re:数列から文字列への変換(文字)について
投稿者---επιστημη(2006/06/25 17:44:36)


>↓の用にint a[]型を使用すると、出来ると思うのですが、出来るだけ、配列を使わなくても、簡単にできますか?

たとえばintの場合大きいものでも高々8byte(一般に4byte)です。
なので頑張っても4文字〜8文字分が精一杯。それでよければ:

#include <stdio.h>

int main() {
 int n;
 char str[] = "abcd";

 /* char[4] → unsigned int */
 unsigned int i = (((str[3]*256+str[2])*256)+str[1])*256+str[0];
 printf("i = %u\n", i);

 /* unsigned int → char[4] */
 for ( n = 0; n < 4; ++n ) {
  int q = i / 256;
  printf("%c", i%256);
  i = q;
 }
 printf("\n");
 return 0;
}



この投稿にコメントする

削除パスワード

No.27332

Re:数列から文字列への変換(文字)について
投稿者---Blue(2006/06/25 17:54:26)


επιστημηさんと同じですが、
sizeof( int ) = sizeof( char ) * 4 であるならば、unionを使うとわかりやすいです。
ただし、文字列なので、'\0'を含めると、3文字分しか変換できません。


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

union Foo
{
    char str[ 4 ];
    int  n;
};

int main( void )
{
    union Foo f;
    
    strcpy( f.str, "abc" );

    printf( "%s\n", f.str );
    printf( "%d\n", f.n );

    return 0;
}




この投稿にコメントする

削除パスワード

No.27334


投稿者---クロ(2006/06/25 18:02:08)


Blueさん、iijimaさん、επιστημηさん、shuさん
質問の回答、ありがとうございました。
大変参考になりました。
というよりも、intって4bytesでしたね。根本的に私の考えが間違っていました。

>sizeof( int ) = sizeof( char ) * 4 であるならば、unionを使うとわかりやすいです。
Unionまだ、勉強していないので、分からないですが、επιστημηさんのソースコードが一挙に短くなった感じで凄いです。
と言うよりも、質問を理解して答えて頂いた皆様ありがとうございました。

>ただし、文字列なので、'\0'を含めると、3文字分しか変換できません。
↑その通りです。w

では、ここは海外なので、もう深夜回っているのでおやすみなさい。ありがとうございました。


この投稿にコメントする

削除パスワード

No.27326

Re:数列から文字列への変換(文字)について
投稿者---shu(2006/06/25 17:27:06)


>↑だとaを数字に直して、数字から文字を表示させています。

「数字に直して」という解釈が、なんか勘違いしているように感じます。

>どうにかして、文字列(文字)→数字→文字列(文字)に戻す方法はないのでしょうか?

文字列から数字
文字から数字
数字から文字列
数字から文字

4パターンもあります。
まずどれか「1つ」に絞る。


この投稿にコメントする

削除パスワード

No.27329

Re:数列から文字列への変換(文字)について
投稿者---クロ(2006/06/25 17:33:28)


数字から文字列に戻したいです。


この投稿にコメントする

削除パスワード

No.27333

Re:数列から文字列への変換(文字)について
投稿者---shu(2006/06/25 17:58:52)


>数字から文字列に戻したいです。

//
#include <stdio.h>

//
union itos {
    char s[4];	//	sizeof(int) == 4の場合
    int i;
};

//////////////
int main(void)
{
    union itos data;
    
    //
    strcpy(data.s, "abc");
    
    printf("%d: %s\n", data.i, data.s);
    
    return 0;
}



この投稿にコメントする

削除パスワード

管理者用メニュー    ツリーに戻る    携帯用URL    ホームページ    ログ    タグ一覧