ページ 11

逆順表示

Posted: 2009年12月03日(木) 18:40
by ma
環境はvistaで、visualc++です。
char型の文字配列をキーボードで入力してうった文字列を逆順に表示するソースプログラムを
作りたいんですけど。どうすればいいですか?

Re:逆順表示

Posted: 2009年12月03日(木) 18:46
by kazuoni
若干問題文がおかしな気がしますが・・・
キーボードから入力した文字を逆順に出力するってことですかね?

文字を配列に読み込み、それを後ろから順に表示すればよいのではないでしょうか?

Re:逆順表示

Posted: 2009年12月03日(木) 18:52
by ma
そのとおりで合っていると思うのですが、
そのやりかたも教えていただけないでしょうか?
初心者なのですみません。

Re:逆順表示

Posted: 2009年12月03日(木) 18:57
by たかぎ
C++なら
#include <iostream>
#include <algorithm>

int main()
{
  char s[/url] = "abcd";
  std::reverse(s + 0, s + 4);
  std::cout << s << std::endl;
}
でできます。

Re:逆順表示

Posted: 2009年12月03日(木) 19:13
by softya
たぶん、C言語の質問ではないかと思いますので、テスト中のテンプレですがお答えください。
※ 規約のテンプレと微妙に違うことを書き添えておきます。
[1] 質問文
 [1.1] 自分が今行いたい事は何か
 [1.2] どのように取り組んだか(プログラムコードがある場合記載)
 [1.3] どのようなエラーやトラブルで困っているか(エラーメッセージが解る場合は記載)
 [1.4] 今何がわからないのか、知りたいのか
[2] 環境
 [2.1] OS : Windows, Linux等々
 [2.2] コンパイラ名 : VC++ 2008EE, Borand C++, gcc等々
 [2.3] 使用言語:C(90,99),C++,C#,VB,JAVA等々詳細にお願いします。
[3] その他
 ・どの程度C言語を理解しているか。言語を勉強してからの期間や自分で思う習得レベル(3ヶ月。初心者)
 ・ライブラリを使っている場合は何を使っているか
これ以外に言語の機能として使ってはいけないものがあれば、お書き添えください。
ポインタは、まだ習っていないので避けてくださいなど。

Re:逆順表示

Posted: 2009年12月03日(木) 19:35
by ma
え~と、たぶんprintfとscanfを使ってデバックした時にキーボードでうった文字列を逆に表示
したいんですけど…
ちなみに初めて3カ月です。

#include <stdio.h>
int main(void)
{
char aa[100];
{
printf("99文字以下で文字列を入力してください。");
scanf("%s", aa);
printf("入力された文字列は%sで,", aa);
}

っていうところまでやったんですけど、この後にprintfを使って逆順に表示したいです。
本当に分かりにくい説明ですみません。m(__)m

Re:逆順表示

Posted: 2009年12月03日(木) 19:49
by kazuoni
関数strlenで文字列の長さが分かれば、いけますよね。
char str[3] = {a,b,c}
strlen(str) = 3
str[2]→str[1]→str[0]

Re:逆順表示

Posted: 2009年12月03日(木) 19:55
by たかぎ
あとはこんな方法でしょうか?
void print_reverse(const char *s)
{
  if (*s != '\0')
  {
    print_reverse(s + 1);
    printf("%c", *s);
  }
}
C言語歴3ヶ月だと、再帰呼び出しは習得したかしないか、ギリギリのところかと思います。

Re:逆順表示

Posted: 2009年12月03日(木) 20:11
by non
次のことにお答え下さい。
特に学校の課題なら、何を使っていいのかが重要です。

1 ポインタを習ったのか否か?

2 逆順にするのは配列の中身ではないのか?表示さえ逆順ならいいのか?

Re:逆順表示

Posted: 2009年12月03日(木) 22:52
by ma
ポイントは習っていません。
逆順にするのは、
#include <stdio.h>
int main(void)
{
char aa[100];
{
printf("99文字以下で文字列を入力してください。");
scanf("%s", aa);
printf("入力された文字列は%sで,", aa);
}

っていうソースプログラムをデバッグしたときに例えばabcdefとうったときに
fedcbaってでるようなソースプログラムをこのあとにうちたいです。

Re:逆順表示

Posted: 2009年12月03日(木) 23:42
by softya
strlen()と配列の参照、forループ、printfでの文字の表示が分かれば組めると思います。
これらの内で使い方が分からないものはありますか?

Re:逆順表示

Posted: 2009年12月03日(木) 23:55
by ma
すみません始めたばかりなので、

int main(void)
{
char aa[100];
{
printf("99文字以下で文字列を入力してください。");
scanf("%s", aa);
printf("入力された文字列は%sで,", aa);
}

っていうプログラムの後にどんなプログラムをうてばいいのか教えてもらえませんか。

Re:逆順表示

Posted: 2009年12月04日(金) 00:07
by たかぎ
> っていうプログラムの後にどんなプログラムをうてばいいのか教えてもらえませんか。

それは自分で考えるべきことです。

ヒント:後だけではダメです。前にも何らかのコードが必要です。

Re:逆順表示

Posted: 2009年12月04日(金) 00:18
by ma
できました~

Re:逆順表示

Posted: 2009年12月04日(金) 00:47
by すずめ
本当にできたんですか?

できなかったんなら ギブアップって書いたほうが良いですよ

int main(void)
{
char aa[100];
{ <= これはおかしくないですか?
printf("99文字以下で文字列を入力してください。");
scanf("%s", aa);
printf("入力された文字列は%sで,", aa);
}

char aa[100];の次の行に'{'があったらエラーが出ると思うんですが?

もっともっと粘らないと正解は教えてもらえないですよ

Re:逆順表示

Posted: 2009年12月04日(金) 06:42
by たかぎ
> char aa[100];の次の行に'{'があったらエラーが出ると思うんですが?

そんなことはありません。

Re:逆順表示

Posted: 2009年12月04日(金) 10:42
by すずめ
大変失礼しました。

#include <stdio.h>
int main(void)
{
char aa[100];
{
printf("99文字以下で文字列を入力してください。");
scanf("%s", aa);
printf("入力された文字列は%sで,", aa);
}

っていうソースプログラムをデバッグしたときに

って書いてあったので、デバックできないんじゃないかと
勘違いしました。
'{' と '}'が対応していないとおもったんですが。

質問者は初心者で始めたばかりということで、
私も独学ですがネットでいろいろなC言語講座で勉強させてもらいましたが、
char aa[100]; の次の行に突然 '{' が出てくるようなことは
はじめてだったものですから。
{ は、ないほうがいいとおもったのは私だけでしたか。

専門家の高木さんが言うんですから、間違った指摘をしたことを
お詫びします。

Re:逆順表示

Posted: 2009年12月04日(金) 10:53
by non
対応していないのはまだ、途中だから。
>{ は、ないほうがいいとおもったのは私だけでしたか。
ない方がいいと思いますよ。エラーではないだけで。

Re:逆順表示

Posted: 2009年12月04日(金) 13:53
by すずめ
#include <stdio.h> 
int main(void) 
{ 
	char aa[100]; 
	{ 
		printf("99文字以下で文字列を入力してください。"); 
		scanf("%s", aa); 
		printf("入力された文字列は%sで,", aa); 
	}
}
確かにこれならOKですね。
勉強になりました。

C++エラーについて質問です

Posted: 2009年12月14日(月) 22:19
by シノニム
こんばんわ。いつもお世話になってます

今回は発生したエラーについてお聞きしたいと思います
いつものようにVisual C++でプログラミングをしていたんですが、デバッグなしで実行した際に、

■fatall error LNK 1104 : ファイル・・・.exeを開くことができません

というエラーが発生しました。このエラーは自分の見解だと、すでに実行しているにもかかわらず新たに実行した場合に起こるエラー、だと思っていました。

しかしながらプロジェクトを実行している気配はなく、困ってリビルドしてみたところ、

■ファイル・・・.exeを削除することができませんでした。このファイルが他のプロセスによって使用されていないこと、または書き込み禁止になっていないことを確認してください

というエラーが・・・2つも出ました

とくに設定などをいじった覚えはなく、困っています
どなたかお力添えをお願いします

OS : Windows XP

Re:C++エラーについて質問です

Posted: 2009年12月14日(月) 22:46
by DVDM
>>シノニムさん
タスクマネージャーを開き、「プロセス」タブの中に
シノニムさんが制作しておられるアプリケーションの名前はないでしょうか?
あるのであれば、その名前をクリックしてプロセスの終了を押し、
再度ビルドなりすると多分大丈夫なはずです。

Re:C++エラーについて質問です

Posted: 2009年12月14日(月) 23:14
by シノニム
>>DVDMさん
なんとこんなところに・・・お陰でがっつり解決しました!
ありがとうございました!