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

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

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

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

Q&A

解決済

3回答

312閲覧

c言語文字列の基本的な質問

sergio

総合スコア10

C

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

0グッド

1クリップ

投稿2021/04/26 07:35

編集2021/04/26 08:46

リンク内容
このURLの問題にある様に、
c言語の空白区切りになっている文字列をscanf関数で取り込んで、
それぞれの単語数をカウントしたいのですが、
空白区切りの単語を別のchar型配列として取り込むにはどうすればよいのでしょうか。

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

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

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

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

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

K_3578

2021/04/26 07:39

外部サイトのURLは「リンクの挿入」で出てくる型に当てはめて下さい。
maisumakun

2021/04/26 07:42

自分で書いてみたコードはありますか?
mather

2021/04/26 08:32 編集

paiza に関しては利用規約として禁止していますので、paizaの内容に関して質問しないほうが良いと思います。 https://paiza.jp/guide/kiyaku ===(以下抜粋)=== 第11条(禁止行為) 利用者等はpaizaの利用にあたり、以下の各号のいずれかに該当する行為または該当すると当社が判断する行為をしてはなりません。 (3)ブログ・SNS等の各種媒体(インターネット媒体に限られず、不特定多数が閲覧可能なものを全て含む。)上において、当社がpaizaで出題した問題の内容、当該問題に対する解答、解答へのヒント等の示唆およびカンニング等の不正を助長する内容等を掲載する行為。 ===(ここまで)=== > このURLの問題にある様に、 paizaの問題そのものではなく、ご自身で考えたコードを書いてみて、コンパイルエラーや期待したものとは異なる挙動をしているものに関して質問しましょう。
sergio

2021/04/26 08:44

この問題については許可されています。urlに飛んでみてください。
sergio

2021/04/26 08:47

@maisumakun どういう風に読み取ればいいのか方針が立たなくて、ほとんどかけていません。
K_3578

2021/04/26 08:48 編集

>matherさん こちら、ややこしいのですがpaizaスキルチェックに関しての事項であり、paizaラーニングに関しては 特に禁止されていないようです。以前、paiza運営様に問い合わせて確認取っています。 とは言え、何かしら書いたコードを基にして質問するべきですね。
mather

2021/04/26 08:47

> 問題にチャレンジして、ユーザー同士で解答を教え合ったり、コードを公開してみよう! 「解答を教え合う」に「一方的に答えを乞う」は含まれるでしょうか? あなたの書いたコード(解答)を公開しましょう。
mather

2021/04/26 08:51

K_3578 さん, sergio さん > paizaラーニングに関しては特に禁止されていないようです。 なるほど。そうでしたか。失礼しました。 が、少なくともコンパイルエラーを起こすものでも良いので、自分で書いたコードを提示しないとどのレベルでわかってないのかすらわからないですね。
K_3578

2021/04/26 08:57

>matherさん 私も以前同じ事コメントして指摘されたので・・・. どこから手を付けていいのか分からないのなら正直まだそのレベルに達してないのでは? とは思いますが・・・。
guest

回答3

0

質問は閉じてしまいましたが、当初の質問のまま「scanfを使って空白区切りの単語を別のchar配列に取り込む」を実装した例です。あくまで参考です。

この問題の例で言えば、scanf("%s", char配列)で空白を区切りとして自動的に区切って取得できます。ただ、単語の個数が不定なので、scanfの返り値EOFで判定するようなことになります。

C

1#include <stdio.h> 2 3int main() { 4 /* 問題の制約条件、配列要素のサイズには要注意 5 1 ≦ N ≦ 1000 6 ならば、ひとつの単語が1000文字である可能性があるということ。 7 */ 8 9 char as[10][20]; 10 int ret; 11 int num = 0; 12 const int entry_max = sizeof(as) / sizeof(as[0]); /* entry_max=10 */ 13 while (num < entry_max) { 14 ret = scanf("%s", &as[num][0]); 15 if (ret == EOF) { 16 break; 17 } 18 ++num; 19 } 20 21 for (int i = 0; i < num; i++) { 22 printf("%d: [%s]\n", i + 1, &as[i][0]); 23 } 24 return 0; 25}

terminal

1$ cat in1 2red green blue blue green blue 3$ gcc t1.c -o t1 4$ ./t1 < in1 51: [red] 62: [green] 73: [blue] 84: [blue] 95: [green] 106: [blue] 11$

上記コードのコメント中に示したように問題によっては配列の要素のサイズに気を付けなければいけないので、他回答でいただいたように、fgetsstrtokでも扱えるようになっておいた方が良いかもしれませんね。

投稿2021/04/26 10:04

dodox86

総合スコア9183

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

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

sergio

2021/04/27 07:48

どうもありがとうございます!!
guest

0

ベストアンサー

そのまんまの答えではないですが、たとえば strtok などの関数を使うとこんな事ができます。

c

1#include <stdio.h> 2#include <string.h> 3 4int main(void){ 5 char str[1000]; 6 char *tok; 7 8 fgets(str, sizeof(str), stdin); 9 printf("%s\n", str); 10 tok = strtok(str, " "); 11 while(tok != NULL) { 12 printf("%s\n", tok); 13 tok = strtok(NULL, " "); 14 } 15 return 0; 16}

投稿2021/04/26 09:29

mather

総合スコア6753

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

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

mather

2021/04/26 09:41

質問者の方にはせめて「c 文字列 区切り文字 分解」くらい検索してほしいです。 いくらでも例が見つかります。
guest

0

空白区切りの単語を別のchar型配列として取り込むにはどうすればよいのでしょうか。

あなたの過去の質問で解決してるんじゃないかと。

投稿2021/04/26 09:07

編集2021/04/26 09:08
episteme

総合スコア16614

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問