• ベストアンサー

Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法

Cシェルで、文字列中(str)に、固定文字列(abc)の数を数える方法を教えてください たとえば、 set str = abcdabceabcd set abc = abc str中に、abcを現れる数(3)を求める方法を教えてください Cシェルは詳しい方がいらっしゃいましたら、是非教えてお願いいたします

  • AJAX
  • 回答数3
  • ありがとう数36

質問者が選んだベストアンサー

  • ベストアンサー
  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

別に詳しいって訳でも無いですが、リダイレクトしてテンポラリファイルに出力してfgrep等で数えるのが簡単かなーと思いますけど。 http://okwave.jp/qa/q198863.html

gooidgwd
質問者

お礼

t_nojiriさん ご回答ありがとうございました ご提示されたURLのリンク先の内容はまったくわかりません。 そんな難しくないと思ってます。 どうもありがとうございました

その他の回答 (2)

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.3

>grepでは -oってのオプションがなさそうですが、 OSを書いてないので、てっきりLinuxだと思いましたが、違いましたか。 コマンドの仕様はOSによって違うので、OSを書かないと適切な回答は得られません。 Cシェル縛りというのも面倒ですね。もっと高機能なシェルを使えないのでしょうか? grep -o が無いとなると、面倒ですが、文字列からabcを削除していって、何回削除が成功するか数えるか、Perl等をつかうか(これもOSによって標準で入ってないかもしれませんが)。

gooidgwd
質問者

補足

notnotさん ご回答ありがとうございました OSはソラリスですが、Cシェル限定なのですが、現在とりあえず実現できました。実現方法はちょっとめんどくさい、下記の通りです 1.元文字列中のabcを空白に置き換えする 2.元文字列の長さー置換後の文字列の長さ/abcの長さ 以上です

  • notnot
  • ベストアンサー率47% (4848/10262)
回答No.2

echo "$str" | grep -o "$abc" | wc -l ですかね。

gooidgwd
質問者

補足

notnotさん ご回答、ありがとうございました grepでは -oってのオプションがなさそうですが、 詳しく説明してくれて、ありがたいです。

関連するQ&A

  • Cシェルの文字列操作について

    初心者ですが、Cシェルで、 最大7バイトの文字列('25'とか'1234567')を左空白埋めで表示したいのですがどうしたらよいでしょうか。 (7 - (文字列のバイト数))×空白 + 文字列 ??

  • abcが、入力された文字列内にあるかどうかを表示するプログラム

    文字列strの中にabcが含まれていれば、1を返し、含まれていなければ0を返すプログラムが分かりません。 C言語の問題で下記のものが分かりません。どなたか知恵を貸してください。 ユーザが文字を入力し、CTRL+Zが押されるまで、半角英数字の入力(最大でも1000文字)を受け付ける。文字列「abc」が、入力された文字列内にあるかどうかを表示するプログラムを作成する。ユーザが入力した文字列が3文字未満はabcがありませんと表示させる。 そのプログラム内で以下の関数を完成させる。 int str_srch_abc(char str []) 文字列strの中にabcが含まれていれば、1を返し、含まれていなければ0を返す関数とする。 (例えばabcは連続でabcの時だけ1を返し、asbscなどはoを返します。) ちなみに自分なりにやってみたのですが、ここまでしかできませんでした。 #include<stdio.h> int main() { int str_srch_abc(char str []); char str[1000]; int ch=0, j=0; printf("半角英数字を入力してください"); scanf("%s",str); while((ch=getchar())!=EOF){ str[j]=ch; j++; } str[j]='\0'; printf("%s",str); return(0); }

  • javascriptで文字列の差分を取得

    var str1 = "abc"; var str2 = "abdec"; var str3 = "abcdef"; var str4 = "defgabc"; 元々の文字列文字数固定ではない(例として)「abc」がありまして、 その最初か最後か途中の文字列の間に何かしらの文字列が入る可能性があります。 そのように追加された文字列を割り出したいのですが、 どのようにしたら良いでしょうか?アイディアお持ちでしたらよろしくお願いします。

  • Cでは文字列をどのように認識するのでしょうか?

    C言語には文字列型というものは存在しないと教わりました。 文字列の終わりはヌル文字で認識できますが、 文字列型というものが存在しないのに何故次のバイトを読もうとするのですか? たとえばchar str[] = "abc";、あるいはchar *p = "abc";とあったとして printf(str);あるいはprintf(p); でなぜabcが出力されるのでしょうか?なぜaの次にbがbの次にcがあるとわかるのでしょうか? char型で先頭アドレスが渡された場合、ヌル文字を見つけるまでアドレスをインクリメントし続けるという決まりでもあるのでしょうか? それに文字列型というものが存在しないなら''と""を分ける意味もないのでは??

  • Cシェルでの文字列大小比較

    Cシェルで set AA="aa" set BB="bb" if( $AA > $BB )then echo "$AA > $BB" endif というような判定がしたいのですが、 上記の場合、”if: 条件式構文が正しくありません”というエラーが出力されます。 Cシェルの場合、文字列の比較は ifでイコールかノットイコールかは判定できますが、文字コードの大小比較が出来ないようですが、 文字列の大小比較をするにはどうすればよいのしょうか

  • 0を含んだ文字列の長さ(バイト数)の求め方

    環境:VC2005 WinAPI32 C言語 SDK 上記の環境でプログラミングをしています。 よろしくお願いいたします。 char str[256]=""; strcat(str, "ABC"); str[4]=0; strcat(str, "DEF"); たとえば上記のようなプログラムで、 str中のバイト数(文字列長?)を求めたいと思っています。 strの中身は [A][B][C][0][D][E][F][0][0][0]...[0]となっていますが、 このとき、7という値を取得したいのですが、何か効率的な方法はありますでしょうか・・。

  • Cシェルでバイナリデータをテキスト文字列として持ちたい

    A.BINというバイナリ形式ファイル (ex) 88 7A BB 4A 11 0D 7D F9 があるとします。 Cシェル内で、このA.BINを”文字列としてもつ”には どうすれば良いでしょうか。 ”文字列として持つ”について、もう少し詳細に言いますと、 set TEXT ## A.BINを何かしらの方法でTEXT変換し、TEXTへ格納 ## ↑ ここがわかりません echo TEXT --標準出力-- 887ABB4A110D7DF9 ↑こんな風に出力されたいです。 もしCシェルで不可能なのであれば、perlならありますので、 perlでの変換方法でも構いません。 すみませんが、知っている方、教えてください><。

  • 文字列strの中から文字cを探すプログラム(C言語)がわからない

    文字列strの中から文字cを探すプログラム(C言語)がわからない 柴田望洋さんの「[新版]明解C言語」という本の演習11-2なんですがどうしてもわかりません。間違いは無いと思うのにコンパイルすると警告を吐かれます。 僕が書いたプログラムを載せます。 /* 文字列strの中に、文字cが含まれていれば(複数ある場合は、最も先頭側とする)、 その文字へのポインタを返し、含まれていなければNULLを返す関数 char *str_chr(const char *str, int c) {} を作成せよ。 */ #include<stdio.h> char *str_chr(const char *str, int c){ while(*str){ if(*str==c) return str; str++; }     return NULL; } int main(){ char *str; char c; scanf("%s",str); scanf(" %c",c);     printf("%d",str_chr(str,c)); return 0; } コンパイラは「関数str_chrのif分の中のreturn strの型変換に問題がある」と言っているんです。 型変換はしるつもりは無いのにコンパイラはなぜそのように認識するのでしょうか。 またネット答えを探しましたがどうやらこのreturn strの部分はreturn (char*)strが正解のようです。意味がわかりません。strはポインタなのになぜまたわざわざchar型に変換しているのですか?といか(char*)の意味が根本的にわかりません。 質問ばかりですみません。初心者でポインタがどうにも理解できないんです。 誰か詳しい人教えてください。 お願いします。

  • 文字数の取得方法(Active Basic 4)

    タイトルのとおりです。 Active Basicを使ってプログラミングをしているのですが、どうしても文字数の取得方法がわかりません。 命令文「Len()」を使えば文字列の「Byte」はわかりますが、文字数が取得できません。 何か良い方法はありますか? (Active Basic 参考プログラム) Dim Str$ As String Str$ = "abc"    '3文字 計3バイト Print Len(Str$)   '「3」が表示されます Str$ = "やほ~"   '3文字 計6バイト Print Len(Str$)   '「6」が表示されます

  • A列とB列で文字数が少ない方をC列に表示する関数

    エクセル2007を使用しています。 A列とB列に下記のように入力されている時、C列に文字数の少ない方を関数で表示させるにはどうしたらよいでしょうか? なおかつ、A列とB列の文字数が同じ場合はA列の文字を表示させたいです。 A列       B列       C列 リンゴ     オレンジ     リンゴ あいうえお   ABC       ABC 時計       帽子      時計 よろしくお願いいたします。