誕生日にもらった意外なもの

文字列を逆順にするプログラムを考えているのですが分かりません。(例)qwerならrewqです。入力終了は、EOFです。途中まで考えたのですが、分かりません。教えてください。宜しくお願いします。
#include <stdio.h>

char str(30);

printf("文字列を入力")
while (1) {
ch=getchar();
if (ch==EOF) break;

A 回答 (5件)

#2補>


#include <stdio.h>

unsigned str_length(const char str[]){
unsigned len=0;

while (str[len])
len++;

return (len);
}

void put_rstring(const char str[]){
unsigned i;

i = str_length(str);
while (i-- >0)
putchar(str[i]);
}

int main(void){
char str[30];
int ch,i=0;

printf("文字列を入力\n");
while (1) {
if (EOF==(ch=getchar()))
break;
else
str[i++]=ch;
}
str[i]='\0';

printf("逆から表示");
put_rstring(str);
puts("です。");

return(0);
}
    • good
    • 0
この回答へのお礼

ありがとうございます。おかげさまで分かりました。

お礼日時:2005/12/31 14:43

> どこが駄目か教えてください。

宜しくお願いします。
> (コンパイルエラーです。)

どの行でどんなエラーが出たかくらいは明記すべし。

ところで、↓に従うつもりはないのですね。

1. 文字列格納領域: char str[30]; を用意し、
2. 入力された文字列を"そのまま"strに格納し、
2.5 strの内容を逆順にし、
3. strを出力する

この回答への補足

コンパイルはできました。しかし、実行してもできません。
何か文字列を入力して、 そして、Ctr1+Zを押す。ここで、本当なら、逆順のプログラムが、表示されるのですが、ZZZとなってしまってプログラムが表示されません。そこで、Enterを押すと、逆順から表示とでるのですが、文字列が文字化けみたいになってしまいます。どうすればいいですか教えてください。宜しくお願いします。別に従うつもりがないわけではないんですが
...

補足日時:2005/12/31 10:21
    • good
    • 0

要素数がNだとして。


str[0]と、str[N-1]を入れ替えます。
str[1]と、str[N-2]を入れ替えます。
str[2]と、str[N-3]を入れ替えます。




そうすると、期待通りの結果になりませんか?


indexを0から(N/2)-1まで
str[index]と、str[N-1-index]を入れ替えます。
をすれば期待通りの結果になりませんか?
これについては、
↓にソースを示します。


あと、別解としては、http://www.interq.or.jp/jazz/iijima/stl/contents …

std::reverse(
を使う。以上。



#include <stdio.h>

#define MAX 512

void reverse(char* argData);

int main(int argc, char** argv) {
char str[MAX];
int count = 0;
printf("文字列を入力");
while (1) {
char ch=getchar();

if (ch == EOF) {
str[count] = '\0';
break;
}

str[count] = ch;
count++;
}
reverse(str);

printf("\n");
printf("[%s]\n", str);

return 0;
}


void reverse(char* argData)
{
int size = strlen(argData);
int half = size / 2;
int index = 0;
for( ; index < half ; index++) {
char temp = argData[index];
argData[index] = argData[size-1-index];
argData[size-1-index] = temp;
}
}
    • good
    • 0
この回答へのお礼

ありがとうございます。おかげさまで分かりました

お礼日時:2005/12/31 14:44

参考URLが参考になるかも



参考URL:http://okwave.jp/kotaeru.php3?qid=1438944

この回答への補足

考えて見たのですが、どうしても分かりません。どこが駄目か教えてください。宜しくお願いします。
(コンパイルエラーです。)


#include <stdio.h>

unsigned str_length(const char str[])
{

unsigned len=0;
while (str[len])
len++;
return (len);
}

void put_rstring(const char str[])
{
unsigned i = str_length(str):
while (i-- >0)
putchar(str[i]);
}

int main(void)
{

char str[30];
int ch;

printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示
              で反対から、文字列が表示----*/
while (1) {
ch=getchar();
if (ch==EOF) break;
}

printf("逆から表示");
put_rstring(str);
puts("です。");

return(0);
}

補足日時:2005/12/31 07:22
    • good
    • 0

# 注意:タイトルは質問内容を端的に表したものを。



1. 文字列格納領域: char str[30]; を用意し、
2. 入力された文字列を"そのまま"strに格納し、
3. strを出力する
プログラムなら書けますか?

それができたら、上記(2)と(3)の間に
2.5 strの内容を逆順にし、
を追加すればいい。まずは(1)~(3)を。

この回答への補足

考えて見たのですが、どうしても分かりません。どこが駄目か教えてください。宜しくお願いします。
(コンパイルエラーです。)


#include <stdio.h>

unsigned str_length(const char str[])
{

unsigned len=0;
while (str[len])
len++;
return (len);
}

void put_rstring(const char str[])
{
unsigned i = str_length(str):
while (i-- >0)
putchar(str[i]);
}

int main(void)
{

char str[30];
int ch;

printf("文字列を入力\n"); /* ----この文字列を入力したあとに、Ctrl+Zを押すと、逆から表示
              で反対から、文字列が表示----*/
while (1) {
ch=getchar();
if (ch==EOF) break;
}

printf("逆から表示");
put_rstring(str);
puts("です。");

return(0);
}

補足日時:2005/12/31 07:18
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報