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

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

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

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

5回答

1816閲覧

出現数最大の文字をカウント(解決済み)

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2019/05/14 08:09

編集2019/05/14 09:39

出現数最大の文字をカウント

プログラム初心者です。
「テキストボックスに文字を入力し、そこで一番多く出現した文字と回数を表示する」という問題がわかりません。

php

1 <?php 2 // 1文字ずつ配列化 3 $input_text = $_POST["input_text"]; 4 $input_text_array[] = str_split($input_text, 1); 5 6 //すべての文字数をカウント 7 foreach ($input_text_array as $t) { 8 $tt = array_count_values($t); 9 } 10 11 //一番多い文字数の取得 12 $max_val[] = max(array_values($tt)); 13 14 ?>

一応途中まで自分で解いてみたものです。
入力文字の配列化(0) => 文字の出現回数カウント(1) => 一番多く出現している文字の判別(2) => (1)(2)の表示
というように解こうと思って今確実に出来ているのは(0)だけだと思っています。
ご教授願いたいです。

追記
なんとか解けたので締め切ります。
後日、自身の解答を載せます。
ありがとうございました。

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

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

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

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

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

m.ts10806

2019/05/14 08:12

「問題」とは?
退会済みユーザー

退会済みユーザー

2019/05/14 08:15

教えてくださっている方からの課題のことですね。
m.ts10806

2019/05/14 08:17

その方に聞けば良いのでは? 課題や宿題の依頼をうけるサイトではないですし、せっかくの課題を他人に答えを聞いてその課題を出した方はどう思うでしょうか。また、自身の身になるのでしょうか。
退会済みユーザー

退会済みユーザー

2019/05/14 08:25 編集

その方がしばらくは忙しいようなので… ずっと同じ課題に時間を浪費しているほうが恐らく無駄ではないかと考えて投稿したつもりでした。 あと忙しくなる前に口頭で質問したのですが、私では理解が及ばなかったので、他の方からテキストでご教授願えたら、と…
m.ts10806

2019/05/14 08:24

では確認です。 今、どこまでできているつもりですか?
m.ts10806

2019/05/14 08:26

やり方は1つではないので「絶対的な手順」は存在しません。 今どこまでできているつもりなのかが分かればそこからのアドバイスができますし、 その「できているつもり」のところが間違っていれば別の角度からのアドバイスも得られると思います。
退会済みユーザー

退会済みユーザー

2019/05/14 08:27

なるほど…大変失礼いたしました。 少々お待ちください。
退会済みユーザー

退会済みユーザー

2019/05/14 08:37

すでに煩雑で自分でもどうすればいいのかわからなくなっているので、一度更地に戻してどのようなアルゴリズムを組めば教えていただければ一番いいのですが… 入力文字の配列化(0) => 文字の出現回数カウント(1) => 一番多く出現している文字の判別(2) => (1)(2)の表示 というように解こうと思って今確実に出来ているのは(0)だけだと思っています。
m.ts10806

2019/05/14 08:38

質問編集して追記してください。
m.ts10806

2019/05/14 08:44

アルゴリズム…の前にフローチャート作ってみたほうが良さそうです
退会済みユーザー

退会済みユーザー

2019/05/14 08:47

了解しました。 ヒントの方もありがとうございます。 皆さんから頂いたものを試しているので、遅くなってしまって申し訳ないです。
guest

回答5

0

php

1<?php 2$s = fgets(STDIN); 3$a = str_split($s); 4$data = array_count_values($a); 5arsort($data); 6reset($data); 7$name = key($data); 8printf("%s %d", $name, $data[$name]);

入力 awbwbdwa
出力 w 3

都合により標準入力からですが。
同数トップは考慮していません。

(1) str_split()で分割する ○
(2) array_count_values()で数える △
(3) 最大値を取る方法は分かるけど、それだとキーが取れない
(4) そういうときはsortを使うんだよ

という感じかと思いました!

投稿2019/05/14 08:37

編集2019/05/14 08:38
takepan1973

総合スコア821

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

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

退会済みユーザー

退会済みユーザー

2019/05/14 08:53

回答ありがとうございます。 一度はsortも頭によぎったのですが、間違っていなかったんですね! 助かりました。
guest

0

php

1function kadai($str) { 2 $count = count_chars($str, 1); 3 arsort($count); 4 foreach($count as $k => $v){ return $k; } 5 return ""; 6}

投稿2019/05/14 09:39

papinianus

総合スコア12705

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

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

0

課題らしいのでヒントのみの回答

  • str_splitではバイト単位の分割となるので全角文字に対応できない。

preg_splitで正規表現による分割が望ましい。mb_splitでもできそう。(試してない)

  • キーにその文字、値出現回数の加算をしていったほうが分かりやすいのでは
  • array_searchで指定した値のキーがとれる

こんな感じで。

投稿2019/05/14 08:37

m.ts10806

総合スコア80765

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

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

m.ts10806

2019/05/14 08:38

ヒントのみと言いつつpaiza.ioで作ったテストプログラムのリンクを置いてみた。
guest

0

PHP

1$str="aabbbbcccdddde"; 2$a=array_unique(preg_split("//",$str, -1, PREG_SPLIT_NO_EMPTY)); 3$b=array_map(function($x) use($str){ 4 return [$x,mb_substr_count($str,$x)]; 5},$a); 6usort($b,function($x,$y){ 7 return $y[1]-$x[1]; 8}); 9$c=array_shift($b); 10print_r($c); 11

投稿2019/05/14 08:23

yambejp

総合スコア114572

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

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

0

ベストアンサー

php

1 <?php 2 // 配列化, 順番に出現回数カウント(1), 一番多い文字判定(2), (1)(2)表示 3 4 //配列化 5 $input_text = $_POST["input_text"]; 6 $input_text_array = preg_split("//", $input_text, -1, PREG_SPLIT_NO_EMPTY); 7 8 //回数カウント 9 $count_text = array_count_values($input_text_array); 10 $max_val = max(array_values($count_text)); 11 12 //一番多い文字の判定と出力 13 echo "一番多く入力された文字:"; 14 15 $no = 0; 16 $length = count($count_text) - 1; 17 $tmp = ""; 18 19 foreach ($count_text as $key => $val) { 20 if ($max_val === $val) { 21 $tmp .= $key . ", "; 22 } 23 } 24 25 if ($tmp) { 26 $tmp = rtrim($tmp, ", "); 27 } 28 echo $tmp . "<br>" . "回数:" . $max_val . "<br>"; 29 30 ?> 31

sortでの解決を試みていましたが、同数トップに対しての考慮がないのが気になり、このような形になりました。
皆様ありがとうございました。

投稿2019/05/15 06:03

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問