質問 1: キーボードから小文字の文字列 (a ~ z) を入力します。
文字列中に同一の文字が複数出現した場合、初めて出現した文字を除外する文字列フィルタリングプログラムを作成してください。
たとえば、文字列「abacacde」のフィルター結果は「abcde」になります。
関数を実装するには次のものが必要です。
次のようにコードをコピーします。
void stringFilter(const char *pInputStr, long lInputLen, char *pOutputStr);
[入力] pInputStr: 入力文字列
lInputLen: 入力文字列の長さ
[出力] pOutputStr: 出力文字列。スペースが開けられており、入力文字列と同じ長さです。
[注意] 関数アルゴリズムを完成させるだけでよく、途中の IO 入出力は必要ありません。
例
入力: "deefd" 出力: "def"
入力: "afafafaf" 出力: "af"
入力: "pppppppp" 出力: "p"
main 関数は隠されています。これはユーザーのために予約されたテストの入り口であり、ここで実装関数をテストし、printf を呼び出して出力を印刷できます。
現在、最終的なプログラムが正しく実行できることを確認する限り、他の方法を使用してテストすることができ、関数の実装は自由に変更できます。
ただし、関数のプロトタイプは変更しないでください。コンパイルや動作に影響がないことを必ずご確認ください。
質問 2: 質問の説明:
キーボードから小文字の文字列 (a ~ z) を入力します。文字列内の連続して繰り返される文字を圧縮し、圧縮された文字列を出力する文字列圧縮プログラムを作成してください。
圧縮ルール:
1. 連続して出現する文字のみを圧縮します。たとえば、文字列「abcbc」には連続して繰り返される文字がないため、圧縮された文字列は「abcbc」のままになります。
2. 圧縮フィールドの形式は「文字の繰り返し数+文字数」となります。例: 文字列「xxxyyyyyyz」は、圧縮後は「3x6yz」になります。
関数の実装に必要なもの:
次のようにコードをコピーします。
void stringZip(const char *pInputStr, long lInputLen, char *pOutputStr);
[入力] pInputStr: 入力文字列
lInputLen: 入力文字列の長さ
[出力] pOutputStr: 出力文字列。スペースが開けられており、入力文字列と同じ長さです。
[注意] 関数アルゴリズムを完成させるだけでよく、途中の IO 入出力は必要ありません。
例
入力: "cccddecc" 出力: "3c2de2c"
入力: "adef" 出力: "adef"
入力:「pppppppp」 出力:「8p」
次のようにコードをコピーします。
パブリック クラス テスト {
static void stringFilter( char InputStr[], long len, char OutputStr[]){
int[] a= 新しい int[26];
int num=0;
int j=0;//OutputStr[] カウント
for(int i=0;i<len;i++){
num = 入力文字列[i]-'a';
if(a[num]==0){//表示されませんでした
出力文字列[j]=入力文字列[i];
j++;
a[数値]=1;
}
}
}
static void stringZip( char InputStr[], long len, char OutputStr[]){
文字温度=' ';
int num=1;
int ポイント = 0;
for(int i=0;i<len;i++){
if(InputStr[i]==temp){
数値++;
}それ以外{
if(num!=1){
OutputStr[point++]=(char)(num+'0');
数値=1;
}
OutputStr[point++]=temp;
temp=入力文字列[i];
}
}
}
public static void main(String[] args) {
// TODO 自動生成されたメソッド スタブ
char [] テスト={'a','a','a','c','b','b','b','a','a','c','a', 'd','d','d','c','d','e'};
長い len=test.length;
char [] res = new char[(int) len];
stringFilter(test,len,res);
int j=res.length;
for(int i=0;i<j;i++){
if(res[i]!='/0'){
System.out.print(res[i]);
}それ以外
壊す;
}
char[] res2=new char[(int) (2*len)];
stringZip(test,len,res2);
for(int i=0;i<2*len;i++){
if(res2[i]!='/0'){
System.out.print(res2[i]);
}それ以外
壊す;
}
}
}