AOJの問題

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
アバター
little
記事: 44
登録日時: 13年前
連絡を取る:

AOJの問題

#1

投稿記事 by little » 13年前

初投稿になります。
C++の勉強がけらオンラインジャッジをしています。
始めたばかりですが...orz

・問題
文字列 str を入力したとき、その文字列を逆順に出力するプログラムを作成して下さい。文字は半角英数字のみで、20 文字以内とします。


・ソース

コード:

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;
void sort(char *str){
	int len, len2 = 0;
	char work; 
	len = strlen(str);

	// 両端から交換
	for(len = len - 1; len > len2; len--, len2++){
		work = str[len];
		str[len] = str[len2];
		str[len2] = work;
	}
}

int main(){
	char str[20];

	cin >> str;
	sort(str);
	cout << str << endl;
	return 0;
}

・テスト
入力
w32nimda

出力
admin23w


になるのですが、ランタイムエラーでダメなようです。
どこがおかしいか助言いただけると大変助かります(_)
百聞は~

たいちう
記事: 418
登録日時: 14年前

Re: AOJの問題

#2

投稿記事 by たいちう » 13年前

ソースはちゃんと見てないけど、バッファを21文字分にするとどうなります?
もしかしてC言語の文字列の扱いに不慣れなのでは?

アバター
little
記事: 44
登録日時: 13年前
連絡を取る:

Re: AOJの問題

#3

投稿記事 by little » 13年前

たいちうさん>
返信ありがとうございます。
char str[21]で提出しましたところ通りました。
(1回次の問題選択してて提出してエラーになりました;)

最大値もテストしたつもりだったんですが出来てなかったようです。
ありがとうございます!

コード:

#include <iostream>
#include <cstring>
#include <cstdio>
 
using namespace std;
void sort(char *str){
    int len, len2 = 0;
    char work; 
    len = strlen(str);
 
    // 両端から交換
    for(len = len - 1; len > len2; len--, len2++){
        work = str[len];
        str[len] = str[len2];
        str[len2] = work;
    }
}
 
int main(){
    char str[21];
 
    cin >> str;
    sort(str);
    cout << str << endl;
    return 0;
}
文字列は結構扱った記憶はあるんですが不慣れかもしれません。
百聞は~

beatle
記事: 1281
登録日時: 13年前
住所: 埼玉
連絡を取る:

Re: AOJの問題

#4

投稿記事 by beatle » 13年前

せっかくC++を使うのにstd::stringは使わないのですかね。

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: AOJの問題

#5

投稿記事 by softya(ソフト屋) » 13年前

少なくとも文字列の最後にはナル文字が入るのは文字列の基本だと思いますので、もう少し勉強されたほうが良いかと。
※ 20文字の文字列を扱うためにはナル文字を含めた21文字分の配列が必要。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

アバター
little
記事: 44
登録日時: 13年前
連絡を取る:

Re: AOJの問題

#6

投稿記事 by little » 13年前

解決してるんですがいろいろ返信頂いているので返します。

beatleさん>なるほど。

コード:

#include <iostream>
#include <string>

using namespace std;

void sort(string str){
    int len, len2 = 0;
    char work; 
  
	len = str.length();
 
    // 両端から交換
    for(len = len - 1; len > len2; len--, len2++){
       // ここ
    }
}
 
int main(){
	string str;
    cin >> str;
    sort(str);
    cout << str << endl;
    return 0;
}
reverseを使うといいようですが、
この型でやってみたいと思います。
コメントアウト部分がわからなかったので調べてみます。


softya(ソフト屋)さん>
わざわざ語句まで載せて頂いてすいません。
'\0'ですね。添字に気を取られて…ごめんなさい忘れてました(_)
百聞は~

閉鎖

“C言語何でも質問掲示板” へ戻る