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

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

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

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

Q&A

解決済

4回答

7435閲覧

C言語 文字列の取得と頭文字

hime

総合スコア12

C

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

0グッド

0クリップ

投稿2016/10/20 11:26

編集2016/10/20 12:57

入力された文字列(スペース含む)の頭文字をとるプログラムを書きたいです。
例として、
「Tarou Tanaka」→「TT」
「as soon as possible」→「asap」
という感じです。
やり方がさっぱりわかりません。もしよろしければご回答よろしくお願いします。

追記:まだポインタを習っていないので、できればそれを用いない方法を教えていただけるとうれしいです。。
strtokを使う方法は、区切った後に最初の文字だけを取る方法がわからず挫折してしまいました。。

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

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

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

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

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

guest

回答4

0

c

1#include <stdio.h> 2 3// 「出力準備完了」「スペースが現れるまで待ち」の2状態を定義 4typedef enum { READY, WAITING } State; 5 6int main(void) 7{ 8 int ch; 9 State s = READY; 10 11 // EOFもしくは改行が来るまで1文字ずつ読み取り続ける 12 while ((ch = getchar()) != EOF && ch != '\n') { 13 if (ch == ' ') { 14 // スペースなら準備完了状態にして次に備える 15 s = READY; 16 // 出力は何もしない 17 } else if (s == READY) { 18 // 準備完了状態でかつスペース以外であれば文字を出力 19 putchar(ch); 20 // 待ち状態に移行 21 s = WAITING; 22 } 23 } 24 25 putchar('\n'); 26 return 0; 27}

投稿2016/10/20 11:52

編集2016/10/20 11:53
mpyw

総合スコア5223

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

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

mpyw

2016/10/20 11:54

strtokを使う方法もアリですが,こちらは何文字入力されても大丈夫な上に省メモリである点が長所です。
guest

0

ベストアンサー

他の回答のようにstrokを使うのも手ですが、学習段階であるなら仕組みを理解するためにも自力で書いた方が良いでしょう。
ということで一例。

c

1#include <stdio.h> 2int main(void){ 3 char s[] = "as soon as possible"; 4 int i; 5 char pre = ' '; 6 for(i = 0; s[i] != 0x00; i++){ 7 if(pre == ' ' && s[i] != ' '){ 8 printf("%c", s[i]); 9 } 10 pre = s[i]; 11 } 12 printf("\n"); 13} 14

投稿2016/10/20 23:38

ttyp03

総合スコア16998

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

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

hime

2016/10/21 01:27

動きました!ありがとうございます。その他の方法も色々模索してみたいと思います。ttyp03さんのように簡潔でわかりやすいプログラムが書けるように勉強頑張ります!
guest

0

strtok()を使用して
ここを参考にされるとどうでしょうか?
http://www9.plala.or.jp/sgwr-t/lib/strtok.html

投稿2016/10/20 11:42

hiim

総合スコア1689

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

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

0

C

1 2#include <stdio.h> 3#include <stdlib.h> 4#include <string.h> 5 6static void print_initialsString(char* input_str) 7{ 8 char sepaleter[] = " "; 9 10 char* tok = strtok( input_str, sepaleter ); 11 while( tok != NULL ){ 12 printf( "%c", tok[0] ); 13 tok = strtok( NULL, sepaleter ); 14 } 15 printf("\n"); 16} 17 18int main(int argc, char* argv[]) 19{ 20 print_initialsString(argv[1]); 21 return 0; 22}

strok()をつかう例を作ってみました。実行時は、コマンドライン引数で対象となる文字列を渡してください。

投稿2016/10/20 16:29

hidetzu

総合スコア19

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問