
パターン1
#include <stdio.h>
#include <string.h>
struct student{
char number[50];
int array;
int score;
};
int main(void)
{
struct student data[1000];
int num = 0;
scanf("%d", &num);
for(int i = 0; i < num; i++){
scanf("%c",data[i].number);
scanf("%d",&data[i].array);
scanf("%d", &data[i].score);
}
for(int i = 0; i < num; i++){
for(int j = 0; j < num - 1 - i; j++){
if(data[j].array > data[j+1].array){
int temp = data[j+1].array;
data[j+1].array = data[j].array;
data[j].array = temp;
int flag = data[j+1].score;
data[j+1].score = data[j].score;
data[j].score = flag;
}
}
}
for(int i = 0; i < num; i++){
printf("%c%d\n%d\n",data[i].number,data[i].array,data[i].score);
}
return 0;
}
-----------------------------------
パターン2
#include <stdio.h>
#include <string.h>
struct student{
char id[50];
int score;
};
int main(void)
{
struct student data[1000];
int num = 0;
scanf("%d", &num);
for(int i = 0; i < num; i++){
scanf("%c",data[i].id);
scanf("%d", &data[i].score);
}
入力
3
D123456
50
D034567
60
D101012
90
出力
D034567
60
D101012
90
D123456
50
このように最初に何セット入力するかを入力
その後最初がアルファベット1文字で始まる(全てD)文字列を入力ご改行して点数を入力。
そして、文字列の中から数字だけを取り出し比較。数字が小さい方から並べ替える。
最後並べ替えた文字列とセットの点数を出力。
パターン1はDだけを入力できる配列と数字だけ入力できる配列を用意して、最初から数字は数字として扱えるようにしている。
パターン2はアルファベットと数字を含む文字列として入力しその後数字だけ取り出し比較したい。
どちらも試しましたが、うまく行きませんでした。どちらのパターンでもいいので教えてください。
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct student{
char id[50];
int score;
}Student_t;
int cmpStudentID(const void* n1, const void* n2) {
if (strcoll(((Student_t*)n1)->id, (((Student_t*)n2)->id)) > 0) {
return 1;
} else if (strcoll(((Student_t*)n1)->id, (((Student_t*)n2)->id)) < 0) {
return -1;
} else {
return 0;
}
}
int main(void)
{
Student_t data[1000];
char s[50];
int num = 0;
scanf("%49s%*[^\n]", s);
getchar();
num = strtol(s, NULL, 10);
for(int i = 0; i < num; i++){
scanf("%49s%*[^\n]", s);
getchar();
strcpy(data[i].id, s);
scanf("%49s%*[^\n]", s);
getchar();
data[i].score = strtol(s, NULL, 10);
}
qsort(data, num, sizeof(Student_t), cmpStudentID);
for(int i = 0; i < num; i++) {
printf("%s\n%d\n", data[i].id, data[i].score);
}
return EXIT_SUCCESS;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プロシージャ名の変数にカウン...
-
C言語でのLinuxとwindows共通の...
-
全角半角を調べるライブラリ関...
-
ピクセル,dpiから容量(バイト...
-
UTF-8で5~6バイトになる文字コ...
-
html→aspxへのタグ変換方法
-
GetWindowTextでアドレスバーか...
-
Excel 1セル当りの文字数が2...
-
Excelで、HTMLタグだけを削除す...
-
C言語でwin32apiを使ってnotepa...
-
COBOLのCOMP形式について
-
Console.writeLineで文字化け
-
10Mバイトて文字数に すると何...
-
Line Inputにて改行があっても...
-
64bit対応
-
Excel VBA チェックツール
-
機種依存文字をチェックしたい。
-
ExcelVBAで、コメントのサイズ...
-
Visual Basicでパック10進(2進...
-
日付時刻を4バイトに
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
printfの%eで指数部分の桁数を...
-
stable diffusionのエラー
-
【Excel VBA】10進数を2進数に...
-
ポインター引数の関数でコンパ...
-
matlabでのRRI検出
-
C#でのswitch文
-
int型(2バイト)データの分割
-
C言語 ファイル内のデータと入...
-
'dataType' 引数を Null にする...
-
RegQueryValueExでの2バイト文字
-
iアプリ jamファイルの動的な出力
-
[error] [client ---- ] Argument
-
EOM間にperl文を作成したい
-
平滑化フィルタ
-
任意な項目のソート
-
変数の書き方
-
Cプログラムがどうしても動きま...
-
hiddenを使ったセッション
-
機械受注は?
-
チェックボックスの値だけが受...
おすすめ情報