- 締切済み
文字認識について教えてください
perlでプログラムを書いています。 配列に//と連続で入っているとき、 (例えばa[0]=a,a[1]=b,a[2]=/,a[3]=/,a[4]=c,a[5]=/,a[6]=d) $count=@a for($i=0;$i<$count;$i++){ if(@a[$i] eq"/"){ 省略 } } とやると、a[3]とa[5]ではifの中に入るのに、a[2]では入りません。 これはどうしてでしょうか? 教えてください。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- venzou
- ベストアンサー率71% (311/435)
- fdsjaklfjas
- ベストアンサー率81% (96/118)
- tatsumi01
- ベストアンサー率30% (976/3185)
関連するQ&A
- phpのfor文の中で配列を作りたいです。
$a = array(); $a[0]="あ"; $a[1]=""; $a[2]="い"; $a[3]=""; $a[4]=""; $a[5]="う"; のような配列がありfor文の中で文字列が一文字以上だったら配列$bに入れるということをしたいのですが、 $b=array(); for($i=0; $i<count($a); $i++){ $c = mb_strlen($a[$i]); if($c>=1){ $b = $a[$i]; } } var_dump($b); とすると$bには最後の”う”しか入りません。 $bを $b[0]="あ"; $b[1]="い"; $b[2]="う"; とするようにするにはどうしたらいいですか?
- ベストアンサー
- PHP
- 配列のソートと削除
String型のstrToRemoveで与えられた文字列を配列から探し、あればそれ以降の配列の数字をすべて左にシフトします。 なので配列の大きさは1小さくなります。その結果の配列をreturnで返します。 例) ({"A","B","C","D","B"}, "B")配列1にBがあるのでそれ以降の文字列をすべて左にシフト→ {"A","C","D","B"} ({"A","B","C","D","B"}, "A") 配列0にAがあるのでそれ以降の文字列を左にシフト→ {"B","C","D","B"} プログラムは以下のように組みました。 public class ArrayFun { public String[] oneRemoved(String[] array, String strToRemove) { int count = 0; for (int i = 0; i < array.length; i++) { if (strToRemove.equals(array[i]) && count == 0) { for (int j = i; j < array.length - 1; j++) { array[j] = array[j + 1]; } count++; } } array = new String[array.length - 1]; array[array.length - 1] = null; return array; } } ちなみにcountは、一度シフトすればもう同じ文字列がそれ以降の配列にあってもシフトはしないので、countでシフトしたかどうかを判断しようと思い付けました。 これでテストメソッドも作るのですが、 import static org.junit.Assert.*; import org.junit.Test; public class ArrayFunTest { @Test public void testoneRemoved() { ArrayFun af = new ArrayFun(); String[] a1 = {"A","B","C","D","B" };//元の配列 String[] a2 = {"A","BB","CCC","DDD","B"};//元の配列 String[] a3 = {"B","C","D","B"};//シフト後の配列 String[] a4 = {"A","BB","CCC","DDD","B"};//シフト後の配列 assertEquals(a3, af.oneRemoved(a1, "A")); assertEquals(a4, af.oneRemoved(a2, "NotHere")); } } 以上のように組むと、assertEqualsの真ん中に黒線が入って自動的に@SuppressWarnings("deprecation")が加えられてしまいます。 実行結果は、({"A","B","C","D","B"}, "A") の例だと、配列0にB が入るはずがnullになっている、とエラーがでます。 どのようにしたら正常に動かせるでしょうか?宜しくお願いします。
- ベストアンサー
- Java
- 文字の結合
Perl初心者です。 ある条件にしたがって文字を結合したいのですが、なかなかうまくいきません。以下のように記述してみたのですが何かヒントございましたらお教え願えませんでしょうか。 実現したいのは、たとえばQ5_1a_1_CB_1とQ5_1a_1_CB_3が"1"だったら_KINOU5_1a_1_に「あ,う」、Q5_1b_1_CB_1とQ5_1b_1_CB_5とQ5_1b_1_CB_6が"1"だったら_KINOU5_1b_1_に「あ,お,か」と代入したいのです。 想像では「$kinou .= $z.",";」のところが何か不足しているような気がします。 for($i=1; $i<=14; $i++){ for ($j=1; $j<=3; $j++){ $c = ('','a','b','c','d','e','f','g','h','i','j','k','l','m','n',)[$i]; $name2 = "_KINOU5_1".$c."_"."$j"."_"; $kinou = ""; for ($k=1; $k<=11; $k++){ $z = ('','あ','い','う','え','お','か','き','く','け','こ','さ',)[$k]; $name3 = "Q5_1".$c."_"."$j"."_CB_".$k; if ($data{$name3} eq '1'){ $kinou .= $z.","; } } chop $kinou; $newtemplate =~ s/$name2/$kinou/g; } }
- ベストアンサー
- Perl
- 条件式の省略
if文の条件式の中を省略したいと思っています。 for(i=0;i<5;i++){ if(p[i][0]==a[0]||p[i][0]==b[0]||p[i][0]==c[0]||p[i][0]==d[0] ||p[i][1]==a[0]||p[i][1]==b[0]||p[i][1]==c[0]||p[i][1]==d[0] ||p[i][2]==a[0]||p[i][2]==b[0]||p[i][2]==c[0]||p[i][2]==d[0] ||p[i][3]==a[0]||p[i][3]==b[0]||p[i][3]==c[0]||p[i][3]==d[0]){ continue; }else{ a[1]=p[i][0]; b[1]=p[i][1]; c[1]=p[i][2]; d[1]=p[i][3]; } ifの条件式の中のp[i][1]~p[i][3]を省略したいのですが、どうやったらできるかわかりません。ぜひ教えてください。
- 締切済み
- C・C++・C#
- ポインタ文字列をchar[ ]の文字列へ変換する方法
C言語の問題で悩んでいます。 ポインタ型で受け取った文字列を、通常の配列に変換し、それぞれの文字列がいくつ使われているというプログラムを組みたいのですが、うまくいきません。 とりあえずここまでのソースを。 #include <stdio.h> int count[95]={0}; void Countx(void){ int x; for(x=0;x<=95;x++){ if(count[x]!=0){ printf("'%c': %d\n",x+32,count[x]); } } } void County(char *str){ int c; for(c=0;c<=20;c++){ count[c+32]=str[c]; } } int main(void){ County("I am a BILL."); Counxt(); return 0; } "I am a BILL"の部分が以下のように ' ':3 '.':1 'a':2 というふうにそれぞれの文字と、利用された回数を出すようにプログラムを組みたいのですが、上記のままだとが ' ':84 '!':104 '"':105 と言う風に、文字コードが空白から順番に、右の回数の部分はなぞの数字が表示されてしまいます。 どうか理想どおりの結果が出るようにする方法を教えてください。 よろしくお願いします。
- ベストアンサー
- C・C++・C#
- c言語の質問です。回答お願いします
下のプログラムですが、隣り合う配列の値の和を求め、さらにその中で一番大きい値を求めるプログラムです。例えば、下のプログラムの例だと配列の最初を0番目とすると3番目が一番大きく2,3,4番目の値を足して21になります。そして、2,3,4番目の中で値が9の四番目を求めたいのですが2番目の5が求めた値となります。おそらく2回目のfor分の辺りがおかしいと思うのですが・・・ よろしくお願いします。 #include<stdio.h> int main(void){ int va[10]={1,3,5,7,9,0,2,4,6,8}; int a,b,c; int max; int saidai; int i,j; max=va[0]; a=0; b=0; for(a=0;a<10;a++){ if(a==0 && max<va[a]+va[a+1]){ max=va[a]+va[a+1]; b=a; } else if(a==9 && max<va[a-1]+va[a]){ max=va[a-1]+va[a]; b=a; } else if(max<va[a-1]+va[a]+va[a+1]){ max=va[a-1]+va[a]+va[a+1]; b=a; } } saidai=va[b-1]; c=0; i=b-1; for(i=b-1;i<=b+1;i++){ if(va[i]<saidai){ c=i; saidai=va[i]; } } printf("%d番目:最大値%d\n",c+1,saidai); }
- 締切済み
- C・C++・C#
- C言語 関数の作り方
1~30の数字を使い、直角三角形が成り立つ組み合わせを見つけよ。(a<=b<=c) ただし、a,b,c辺を見つけて配列に入れる機能は関数にすること。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー #include <stdio.h> int main(void) { int a,b,c,i=0,ct=0; int ahen[20]; int bhen[20]; int chen[20]; for(a=1;a<31;a++) { for(b=1;b<31;b++) { for(c=1;c<31;c++) { if(a*a+b*b==c*c && a<=b && b<=c) { ahen[i]=a; bhen[i]=b; chen[i]=c; i=i+1; ct++; } } } } for(i=0;i<ct;i++) { printf("%d %d %d\n",ahen[i],bhen[i],chen[i]); } return 0; } 実行例: 3 4 5 5 12 13 6 8 10 7 24 25 8 15 17 9 12 15 10 24 26 12 16 20 15 20 25 18 24 30 20 21 29 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー とりあえず、関数を使わない上記のプログラムを作って見ました。 ここから関数を使ったものに変更したいのですが、配列が絡むとさっぱり分かりません。 printfで表示する箇所以外を全て関数にするのだと思いますが、どなたかご教示願います。
- 締切済み
- C・C++・C#
- 文字と数字の判定について
c言語を学び始めたばかりの者です。 #include <stdio.h> #include <stdlib.h> #include <time.h> #include <ctype.h> main(){ printf("数当てゲームを開始します。\n"); int a,count,n,b; srand((unsigned)time(NULL)); printf("1~10の中から1つ数字を選びます。\n"); a = (rand()%10)+1; printf("選びました\n"); for(count=0;;count++){ printf("その数字はズバリ:"); scanf("%d",&n); //もし数字でなければという文にしたい!! if (?){ printf("数字を入力してください。\n"); continue; } else{ if(n<a){ printf("もっと大きな値です。\n"); printf("%d回間違えました。\n",count+1); continue; } if(n==a){ printf("正解です!!\n"); b=0; exit(0); } if(n>a){ printf("もっと小さな値です。\n"); printf("%d回間違えました。\n",count+1); continue; } } } } というプログラムなのですが数字の判定の仕方が分からなくて最初のifの条件に何をいれればいいのか分からないので分かるかたいましたら教えてもらえないでしょうか?
- ベストアンサー
- C・C++・C#
- 2つの変数(文字)を組み合わせて1つの変数として認識させる方法?
PHPの初心者チュートリアルサイトやphp manualなども見てるのですが あまりに基本的過ぎるのか、どうしてもわからないので教えてください。 $myarray1 = array("a","b","c"); $myarray2 = array("d","e","f"); $myarray3 = array("x","y","z"); という配列があるとして、 これをforループで使いたいと考えました。 例えば無理やり書くと下記のようなイメージなのですが やはりこのようなあてずっぽうではうまく行かず・・・。 for( $i = 1; $i<= 3; $i++ ){ echo {$myarray.$i}[0] . "<br/>"; } 「$myarray.$i」を$myarray1~3と認識させてa,d,xの3つを出力することはできますか?
- 締切済み
- PHP
お礼
タイトルへのご指摘ありがとうございます。 ちなみに、どこに問題があるか知るために、print文で出力したり、他の部をコメントアウトしたりは当然やっております。 それでもできないので、今回は質問させて頂きました。 たまたま、2つの質問が続いてはしまいましたが、2つとも何日かやった後にわからないので質問させて頂いたのです。 回答ありがとうございました。