質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

1回答

952閲覧

名前をアルファベット順にソートしたいのですが、どこが間違ってるのか全くわかりません。

Dime

総合スコア10

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

0クリップ

投稿2018/12/09 05:33

編集2022/01/12 10:55

前提・実現したいこと

名前をアルファベット順にソートするプログラムを作りたい。
ここに質問の内容を詳しく書いてください。
C++で名前ソートのプログラムを作成する上で、コードは合ってると思うのですが、何度やってもうまく行かずどこが悪いのか全く見当がつきません。

発生している問題・エラーメッセージ

名前をアルファベット順にソートしたいのですが、表示も並び替えもうまくいきません。
エラーメッセージ
エラーメッセージは特に表示されませんでした。

該当のソースコード

C++ここに言語名を入力
ソースコード
ヘッダー:
#ifndef RECORD_H
#define RECORD_H

#include <iostream>
#include <string>

using namespace std;

class Student
{
private:
char firstname[10];
public:
void setName()
{
cout << "Enter a student's name: ";
cin >> firstname;
}

char* getName() { return firstname; } void displayName() { cout << firstname; }

};

#endif

main.cpp:
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#include <vector>
#include "Record.h"

using namespace std;

int main()
{
int number = 0;
cout << "enter a number: ";
cin >> number;

Student student[number]; Student holder; for(int i = 0; i < number; i++) { student[i].setName(); } for(int i = 0; i < number - 1; i++) { for(int i = 0; i < number; i++) { if (strcmp(student[i].getName(), student[i+1].getName()) > 0) { holder = student[i]; student[i] = student[i+1]; student[i+1] = holder; } } } for(int i = 0; i < number; i++) { student[i].getName(); } for(int i = 0; i < number; i++) { student[i].displayName(); cout << ", "; } cout << student[1].getName(); return 0;

}
### 試したこと

if (strcmp(student[i].getName(), student[i+1].getName()) > 0) の部分をif(student[i].getName() > student[i+1].getName())で試してみたのですがそれでもうまくいきませんでした。

補足情報(FW/ツールのバージョンなど)

Xcodeを使用(C++11)。表示結果は、こうなりました。
enter a number: 4
Enter a student's name: hiro
Enter a student's name: takashi
Enter a student's name: yuu
Enter a student's name: tama
tama, \336 , hiro, takashi, \336 Program ended with exit code: 0

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/12/09 05:55

C# は関係ないようですが、であれば、タグは外していただくようお願いします。
Dime

2018/12/09 06:01

ご指摘ありがとうございます。知識不足で、間違ってつけていました。
izmktr

2018/12/09 06:03

流石にソースが読みづらいので、<code>ボタンを押してその中にソースを入れてくれませんか
cateye

2018/12/09 06:22

std::set使っちゃダメですか?・・・同じ文字列が重複するんでしょうか?
guest

回答1

0

for(int i = 0; i < number - 1; i++) { for(int i = 0; i < number; i++) {

ここに2点問題があります。

  • ループ変数iが被っている
  • バブルソートとしておかしい

using namespace std;をmain.cppで行うのはまぁ勝手ですけど
ヘッダファイルのファイルスコープではやらない方がいいです。

投稿2018/12/09 06:30

asm

総合スコア15147

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問