|
初めまして、自分はC言語を独学である程度適当に勉強?して約1年と7ヶ月くらい経ちました。前から辞書順に並びかえるというプログラミングをstrncmpとかは使わずに、先頭が違う文字であれば並び変えて、同じ文字が来たら、違う文字がでるまで配列をインクリメントして、、、というようなプログラムがなかなかできずに3週間もかかってしまいました。
実は自分はインターネットはお金がかかるし、誘惑も多いので、自宅にはつけてないんです、だから、家のパソコンで作ったプログラムをノートに写してきたので、間違っているところがあるかもしれませんが、自分のパソコンでは、警告もなく、普通に動作してくれます。もしかしたら、}の数が違うかもしれませんが、プログラムを見てくれませんでしょうか?
それで、自分はこの自分の書いたプログラムが独学なので、いろいろなホームページで見たときに、10人、プログラマーがいたらできる人は1人で、普通の人が4人で後の5人は足をひっぱる人だと聞いたことがありました。それでどうしても、自分のプログラムが足をひっぱるタイプの人間の書いたプログラムに近いのか、普通の人に近いのか、大体のところを知りたいんです。よろしくお願いします。
以下のプログラムで、自分の希望している働きは
「誰かに入力したい、文字列を何個入力したいのかを入力してもらって、
その数だけいろいろな文字列を入力してもらって、その入力された文字列
配列にどんどん、格納していって、その結果、配列に格納された文字列を表示した時に小さい順に並び変わっていてほしいというものです。もし先頭が同じ文字であったなら、その文字列と、その次の文字列の先頭文字が違う文字が出るまで、インクリメントして、違う文字になったら、同じように、その違う文字同士を比べて、小さい順に並びかえるというものです
」
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
void change(char *str1, char *str2, char *now_str){
char swap[30] = "";
strcpy(swap, str1);
strcpy(str1, str2);
strcpy(str2, swap);
strcpy(now_str, str2);
}
main()
{
char str[20][30] = {
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""},
{""}
};
int num = 0;
int i;
int j;
int v;
char now_str[30] = "";
char swap[30] = "";
puts("何個入力する気なのかしら?");
scanf("%d", &num);
for(i = 0; i < num; i++){
scanf("%29s", &str[i]);
}
system("cls");
puts("入力された文字列");
for(i = 0; i < num; i++){
printf("%s\n", str[i]);
}
for(i = 0; i < num; i++){
strcpy(now_str, str[i]);
for(j = 0; j < num; j++){
if(i!= j && (int)(now_str[0]) > (int)(str[j][0])){
change(str[i], str[j], now_str);
}
else if(i!= j && (int)(now_str[0]) == (int)(str[j][0])){
for(v = 0; (int)(now_str[v]) == (int)(str[j][v]); v++){
}
if((int)(now_str[v]) > (int)(str[j][v])){
change(str[i], str[j], now_str);
}
}
puts("修正結果よ");
for(i = num - 1; i >= 0; i--){
printf("%s\n", str[i]);
}
v = 0;
i = num - 1;
printf("上記の並び順で小さい順に並んでいるか、、、");
while(i > 0 && (int)(str[i][v]) < (int)(str[i-1][v]) || (int)(str[i][v]) == (int)(str[i-1][v])){
if((int)(str[i][v]) == (int)(str[i-1][v])){
for(v = 0; (int)(str[i][v]) == (int)(str[i-1][v]); v++){
}
else{
i--;v = 0;
}
if(i == 0){
puts("OK!!");
for(i = num - 1; i >= 0; i--){
if((int)(str[i][0])!= (int)(str[i-1][0])){
printf("%s %d", str[i], (int)(str[i][0]));
}
else if((int)(str[i][0]) == (int)(str[i-1][0])){
for(v = 0; (int)(str[i][v]) == (int)(str[i-1][v]); v++){
}
printf("%s %d", str[i], (int)(str[i][v]));
}
else if(i == 0 && (int)(str[i][0]) == (int)(str[i+1][0])){
for(v = 0; (int)(str[i][v]) == (int)(str[i+1][v]); v++){
printf("%s %d", str[i], (int)(str[i][v]));
}
}
puts("");
}
}
else{
puts("\aFalse\a");
}
}
}
}
}
}
|