だよな
>>938 も素直に自分の勘違いをみとめてりゃよかったのになw
だいたい0でも問題ないし
ふぅん
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク):入力した文字列の中に 指定した文字が含まれていればその文字が左から何文字目にあるかを表示し、 指定した文字がなかった場合は-1と表示する関数を作成せよ。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: visual studio [3.3] 言語: C言語のみ [4] 期限: [2010年09月21日まで] [5] その他の制限: 関数名はint str_char(const char str[], int c)で作ること
int str_chr(const char str[], int c) { int i; for(i = 0; str[i]; i++) if(str[i] == c) return i; return -1; }
957 :
955 :2010/09/16(木) 17:21:14
っと表示する関数か int str_chr(const char str[], int c) { int i; for(i = 0; str[i]; i++) { if(str[i] == c) { printf("%d\n", i); return i; }} printf("-1\n"); return -1; }
>>955 int str_char(const char str[], int c) {
int index;
for (index = 0; str[index] != '\0'; index++) {
if (str[index] == c) return index;
}
return -1;
}
960 :
959 :2010/09/16(木) 17:26:02
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク):入力した文字列の中に 指定した文字がいくつあるか表示し、 指定した文字がなかった場合は0と表示する関数を作成せよ。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: visual studio [3.3] 言語: C言語のみ [4] 期限: [2010年09月21日まで] [5] その他の制限: 関数名はint str_chnum(const char str[], int c)で作ること 連続ですみませんが、よろしくお願いします。
>>961 // 指定した文字がいくつあるか表示し、 指定した文字がなかった場合は0と表示
// ↑表示は無視
int str_chnum(const char str[], int c) {
int sum = 0;
char *p;
for (p = str; *p != '\0'; p++) {
if (*p == c) sum++;
}
return sum;
}
958 959 962さんもありがとうございます。 963さん、助かります。
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): void put_string(const char str[]) { unsigned i = 0; while (str[i]) putchar(str[i++]); } 上の関数と同じ動きする関数をputcharではなくprintfを用いて作成せよ。 [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: visual studio [3.3] 言語: C言語のみ [4] 期限: [2010年09月21日まで] [5] その他の制限:なし 一人でたくさん投稿してすみません。 課題が8つ出たので今のが3つ目です。 よろしくお願いします。
966 :
963 :2010/09/16(木) 17:56:22
修正: char *p; ↓ const char *p;
>>965 void put_string(const char str[])
{
printf("%s", str);
}
printf(str);
だと間違い。
残り全部まとめて出したほうが面倒がなくていいと思うよ
まとめて出したら答えないよ
[1] 授業単元: プログラミング基礎 [2] 問題文(含コード&リンク): void put_string(const char str[]) { unsigned i = 0; while (str[i]) putchar(str[i++]); } 上の関数をもとに、入力された文字列を逆に表示する関数を作成せよ。 例:ABC→CBA [3] 環境 [3.1] OS: Windows7 [3.2] コンパイラ名とバージョン: visual studio [3.3] 言語: C言語のみ [4] 期限: [2010年09月21日まで] [5] その他の制限:なし 課題4つ目です。 よろしくお願いします。
972 :
971 :2010/09/16(木) 18:12:34
追加します。 関数名はput_rstringでお願いします。
>>967 こうしないとUINT_MAXを超えたときの挙動が変わっちまうだろ?
void put_string(const char str[])
{
unsigned i = 0;
while (str[i])
printf("%c", str[i++]);
}
>>971 int put_rstring(const char str[]) {
unsigned i = 0, tail = strlen(str) - 1;
while (str[tail - i])
putchar(str[tail - i++]);
}
975 :
974 :2010/09/16(木) 18:22:14
>>971 // 変数一個減らしてみた。けど、ちょっと流れは不自然かも。
int put_rstring(const char str[]) {
unsigned i = strlen(str);
while (i)
putchar(str[--i]);
}
>>971 void put_rstring(const char str[])
{
unsigned i = 0;
while(str[i]) i++;
while(i--) putchar(str[i]);
}
いやダメと言われても
ダメな理由を書いてほしいな
984 :
974 :2010/09/16(木) 18:39:27
>>978 unsigned i = 0, tail = strlen(str) - 1;
while (str[tail - i])
あー。こういうのは長さがゼロのときマイナス行っちゃうからダメなのか。
unsigned int で4294967295。
こちらの環境ではうまくいってるのは偶然か。
長さが0とかじゃなく、文字列先頭の1文字前には何が入ってるか決まってないから
>>985 先頭の一文字前に行くの?
今の段階では strlen("") - 1のとき、
str + 4294967295を見ると思ってるけど、そうはならないのかな。
[1] 授業単元:C基礎実習 [2] 問題文(含コード&リンク):ユーザーが入力できるr行s列の行列Xとt行y列の行列Yの掛け算を計算するプログラムを作成しなさい。尚、ポインタを使用して計算すること [3] 環境 [3.1] OS: Windows [3.2] コンパイラ名とバージョン:VC++ 2008 [3.3] 言語: C [4] 期限: 9月22日 [5] その他の制限: 必ずポインタを使う事と、任意の数をユーザーが入力できること #include <stdio.h> int main(void){ int a[][4]={{1,2,3,4},{5,6,7,8}}; int *b; int sum[2], i, j; b=a[0]; printf("&a[0][0]= %u, a[0]= %u\n", &a[0][0], a[0]); sum[0]=sum[1]=0; for(i=0; i<2; i++){ for(j=0; j<4; j++){ sum[i] += *(b+4*i+j); } } printf("sum[0]= %d, sum[1]= %d\n", sum[0], sum[1]); } 任意の数を入力させない場合はできたのですが、任意の数を読み込ませる形がわかりません・・・お願いします
>>986 > while (str[i++]);
これが終了するときのiの値をよく考えてみましょう
>>987 char str[] = "abcdef";
put_rstring(str + 3);
って試してみましょう
>>989 unsigned 分かってなかった…。
char cs[] = "abcdef", *p = cs + 3;
unsigned ui = - 1;
printf("ui u[%u], d[%d]\n", ui, ui);
printf("cs[%s], p[%s]\n", cs, p);
printf("p[-1] = [%c]\n", p[-1]);
printf("p[ui] = [%c]\n", p[ui]);
↓
ui u[4294967295], d[-1]
cs[abcdef], p[def]
p[-1] = [c]
p[ui] = [c]
992 :
デフォルトの名無しさん :2010/09/16(木) 19:01:07
っていうかどこで止まるつもりだったんだよ
994 :
デフォルトの名無しさん :2010/09/16(木) 19:08:19
>>989 >>976 は正しい様に思えるよ
putchar( str[--i] ); が putchar(str[i--]); なら間違いだけど
>>994 なんで
>>990 で何も言わずに修正したのか理解できていません
while(str[i++]);
このループが終了したとき、str[i]は文字列終端の一文字後ろ指します
そして
putchar(stt[--i]);
の最初は、そこから一つ前、すなわち文字列の終端である'\0'になります
996 :
デフォルトの名無しさん :2010/09/16(木) 19:16:16
失礼、
>>990 見てなかった、ちょっと吊ってくる
ところで次スレ大丈夫?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。