A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
★解答( sanot )の頭は、検索文字( o, s, t )である。
このことから、対象となる文字列 Thatisanotebook
の頭から、検索文字( o, s, t )以外を除外していく(◆)。
★残った文字列( tisanotebook )から、検索文字( o, s )の内、
最後に検索した場所(▲最後-トップ)を、メモしておく(●)。
(1つの解答が得られた)
★次に、◆と同様に、検索文字( o, s, t )以外を除外し、
残った文字列( sanotebook )から、・・(略:繰り返し)
てのは如何でしょう。
>for文を使った簡単なものは作れるのですが、処理が遅すぎて困っています。
「丸投げ」ではないので、「瞬時」に結果の出るソースを・・。
★参考になればよいのですが(ずいぶん長くて・・申し訳ない)
-----------------------------------------------------
#include <stdio.h>
#include <string.h>
typedef struct{
int iLen;
char cAns[32];
}MEMO;
MEMO sWork[10];
int UseTotal( int iUse[] )
{
int i, iTotal = 0;
for( i = 0; i < 8; i++ ) iTotal += iUse[i];
return( iTotal );
}
void main()
{
char cTaisyou[32] = "Thatisanotebook";
char cKensaku[ 8] = "ost";
int i, j, iLen, iTop, iHead;
int iUse[8], iKenCnt = 0, iMojiSu;
iMojiSu = strlen( cKensaku ); // 検索文字数
for( iTop = 0; iTop < 32; iTop++ ){
if( 0x00 == cTaisyou[iTop] ) break;
iHead = 0;
for( i = 0; i < iMojiSu; i++ ){
if( cKensaku[i] == cTaisyou[iTop] ){
iHead = 1;
break;
}
}
if( 0 == iHead ) continue; // ◆
for( i = 0; i < 8; i++ ) iUse[i] = 0; // 初期化
for( j = iTop; j < 32; j++ ){ // 対象文字列を1つずつ
if( 0x00 == cTaisyou[j] ) break;
for( i = 0; i < iMojiSu; i++ ){
if( iUse[i] ) continue;
if( cKensaku[i] == cTaisyou[j] ){
iUse[i]++; // 検索文字使用済み
if( UseTotal( iUse ) == iMojiSu ){ // ●
iLen = j - iTop + 1; // ▲
strcpy( sWork[iKenCnt].cAns, &cTaisyou[iTop] );
sWork[iKenCnt].cAns[iLen] = 0x00;
sWork[iKenCnt].iLen = iLen;
iKenCnt++;
}
break;
}
}
}
}
for( i = 0; i < iKenCnt; i++ ){ // ●出力
printf( "%2d %s\n", sWork[i].iLen, sWork[i].cAns );
}
}
注:インデントに全角空白を用いています。
タブに一括変換して下さい。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 2つのテキストファイルを比べて文字列を特定する方法を教えて下さい 5 2022/05/01 15:22
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作りたいのですが 1 2022/10/24 18:56
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- Java Java 南京錠 2 2023/02/04 11:46
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
- Visual Basic(VBA) 特定の文字を簡単な操作で半角スペースに変換するか削除したい 2 2022/11/01 10:35
- C言語・C++・C# VisualStudioのソースコードで漢字を使いたい 4 2022/05/21 10:16
- Excel(エクセル) エクセルの条件付き書式で*を使いたい 4 2022/05/13 16:49
- その他(プログラミング・Web制作) Pythonでこのプログラミングを作成するには 2 2022/10/25 21:19
- Evernote Evernote(エバーノート)の文字化け 1 2022/04/05 19:30
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
Cで「大文字、小文字の判定」は...
-
sscanfとscanfの違いがよくわか...
-
fgets関数を使用したときの文字...
-
反転した数値を表示させるやり方
-
エディットボックスに入力され...
-
C言語 strlen 再入力を促す
-
1行の文字列を時間差で表示する...
-
C言語、単語ごとに改行したい
-
C言語のステップ数をカウントす...
-
文字の入れ替えについて
-
教えていただけませんか?C言語...
-
C言語 文字を入力させて 入力さ...
-
文字列中に含まれる文字の個数...
-
C言語でパスワード作成ツール
-
charと%c , %s の関係について
-
C言語 空白の行(改行のみ)が...
-
fgetsで拾われる改行文字を削除...
-
ブランクのチェック
-
itoaわかりません
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
sscanfとscanfの違いがよくわか...
-
反転した数値を表示させるやり方
-
fgets関数を使用したときの文字...
-
C言語 空白の行(改行のみ)が...
-
charと%c , %s の関係について
-
C言語のステップ数をカウントす...
-
fgetsで拾われる改行文字を削除...
-
itoaわかりません
-
C言語で16進数文字列から16進数...
-
strstrを利用しない文字列検索...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
エディットボックスに入力され...
-
1行の文字列を時間差で表示する...
-
文字列の途中に「0」がある場...
-
[Java]文字列分割
-
教えていただけませんか?C言語...
-
atoiでの文字列以外のエラー処...
-
ブランクのチェック
おすすめ情報