以前投稿させていただいた、HN Y.N と申します。
今回も、前回と同じ学校の課題について改善方法をお聞きしたいことがあります。
私のc言語のレベル自体は底辺の底辺だと理解できています。
ある程度学習はできたとは思いますが、勘違いで覚えていたり、よく理解できていない部分もあるかと思われます。
そこでこの掲示板に投稿させていただきました。
今回の課題で出された問題は、
「いわゆる、学生番号を文字列として受け取り、その最初の2文字と最後の4文字を抜き出してつなげ、その後int型の整数値に変換して返す関数を作りなさい」
です。
私の学校の学生番号の型は「○○○-A○○○○」(○:0~9までの数字が入る A:A~Zまでの英字が入る)となっています。
なのでEX「999-Q8888」という学生番号でしたら、関数によって 998888 という値が返されるということです。
ただ、もし学生番号がEX「099-Q8888」と、はじめの3つの数字の先頭が0だった場合、
返される値は 98888 となります。
つまり先頭が0のときは、0はないものとして考えるということになります。
では私の考えた関数id2intを下に置きます。
#include <stdlib.h>
int id2int(char *p)
{
int n, i;
char x[10];
char y[7];
x[10] = *p;
y[0] = x[0];
if (y[0] == "0") {
y[0] = x[1];
}
else if (y[0] != "0") {
y[1] = x[1];
}
for (i = 0; i < 5; i++) {
y[i + 2] = x[i + 5];
}
n = atoi(y);
return n;
}
その後、その文字列をint型の整数値に変換する工程を、atoiを用いて行っています。
このatoiはWEBで調べたものなので理解度はまだ低いです。
一応これでコンパイルするとエラーなくできるのですが、実際にこの関数を用いたところ、思うような結果が出ません。
結合する過程でどこか間違えていると考えていたのですが、改善点が見つからなかったのでお聞きしたいと思っています。
この課題の提出期限があと一日ですが、切羽詰っているというわけでもありませんので、
このトピックを見ていただいた方でお時間がありましたら、ご教授のほどよろしくお願いします。