
No.7ベストアンサー
- 回答日時:
# 横槍ぎみに失礼します。
strtok() でいけますよね。
第2引数にデリミタを列挙すれば良いわけですし。
たとえば、↓こんな感じ↓
----------------------------------------
char src[] = "This is a pen, and that is a pencil: Great";
char *dest;
dest = strtok( src, " ,:" );
while ( dest != NULL )
{
puts( dest );
dest = strtok( NULL, " ,:" );
}
----------------------------------------
【結果】
This
is
a
pen
and
that
is
a
pencil
Great
No.5
- 回答日時:
自分で一文字ずつ見るコード書かなくても strtok で一発では?
参考URLにサンプルもあります。
参考URL:http://www9.plala.or.jp/sgwr-t/lib/strtok.html
No.4
- 回答日時:
英文の表記ルールだと、カンマの後には空白一つ、ピリオドの後には空白二つを置くというのが
あるはずですが、その辺の扱いはどうなりますか?
たとえば hello, world と入力した場合の結果は
hello
(空行)
world
のようになってもOKですか?
それと、ダブルクォートやシングルクォートで囲まれているのは
空白を含んでいても一つの語として見なさなくても良いのでしょうか?
No.3
- 回答日時:
区切り文字(デリミタ)が複数なんですね、
ただ単に表示するだけなら、
#include <stdio.h>
#include <string.h>
#define MAX_LENGTH 256
int main(void) {
char buf[MAX_LENGTH];
int i;
/* bufには既に文字列が入力済みとします */
len = strlen(buf); /* 文字列の長さを取得 */
if (len > MAX_LENGTH) { /* バッファサイズ以上のときエラー */
fprintf(stderr, "エラー:文字列が長すぎます\n");
return 1;
}
/* 文字列長だけループ */
for (i=0; i<len; i++) {
/* 文字列の空白、コンマ、コロンを改行に置換 */
if (buf[i]==' ' || buf[i]==',' || buf[i]==':') buf[i]='\n';
}
/* 文字列を表示 */
printf("%s\n", buf);
return 0;
}
でどうでしょう?(^^
No.2
- 回答日時:
愚直に書くと
char* str = "This is a book";
int i;
/* strlenにstring.hのincludeが必要 */
/* 1文字ずつ処理 */
for(i = 0; i < strlen(str); i++){
char ch = str[i];
/* 改行をする場合を判定 */
if(ch == ' ' || ch == ',' || ch == ','){
putchar('\n');
}
else{
putchar(ch);
}
}
のような感じではないでしょうか。
「ある引数の文字が、別の引数の文字列の中のいずれかに当てはまる場合場合」という判定を行う関数があったような気もしますが、失念してしまいました。
参考までにどうぞ。
No.1
- 回答日時:
★アルゴリズム
・文字列を左から検査して、スペース、カンマ、コロンの文字の時だけ
改行コード(\n)を出力すればよい。
・スペース、カンマ、コロン以外の文字は普通に putchar で出力します。
●サンプル
void MyPrint( const char *string ) ←入力した文字列を指定
{
while ( *string != '\0' ){
if ( strchr(" ,:",*string) != NULL ){
putchar( '\n' );
}
else{
putchar( *string );
}
string++;
}
}
・以上。おわり。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
fgetsとsscanfを使って一行から...
-
if文の判定条件('||'と'&&'の使...
-
最早開始時間と最遅完了時刻を...
-
C言語 エラーの原因がわからな...
-
信頼区間の1.96や1.65ってどこ...
-
「Aに対するBの割合」と「Aに対...
-
For文の終了値を関数にしても問...
-
配列をnビットシフトする
-
数学 一次関数 関数 y=-3/4x+k(...
-
std::set<int> で、ある値が何...
-
Enterキーを押されたら次の処理...
-
main.c:7:43: warning: implici...
-
#define _CRT_SECURE_NO_WARNIN...
-
InvokeMemberメソッドとは何を...
-
【#define】 defineで定義した...
-
2の補数を計算するプログラム
-
a^2の√=a が成り立たない場合
-
2÷3などの余りについて
-
PICで小数点の演算
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
fgetsで拾われる改行文字を削除...
-
fgets関数を使用したときの文字...
-
Cで「大文字、小文字の判定」は...
-
反転した数値を表示させるやり方
-
C言語 空白の行(改行のみ)が...
-
itoaわかりません
-
C言語のステップ数をカウントす...
-
charと%c , %s の関係について
-
文字列の途中に「0」がある場...
-
C言語の勉強しています。すみま...
-
putsとputcharの違い?
-
fgetsとsscanfを使って一行から...
-
単語数のカウントについて
-
C/C++言語で日本語処理
-
CStringについて
-
C言語で16進数文字列から16進数...
-
printfの引数指定でなぜ文字列...
-
C言語(ポインタ)について
おすすめ情報