
プログラムがなぜ正しく出力されないのかわからないです。
(課題)
コマンドライン引数で文字列(アルファベットの大文字または小文字)を受け取り連続している個数を数で表す。(例 aafwGGg → a2f1w1G2g)
(プログラム)
#include<stdio.h>
#include<string.h>
//arrでどの文字が何回連続になっているかを記録する。
int main(int argc, char *argv[]){
int i, j = 0, counter = 1; char *str;
//文字列のコピー
str = argv[1];
//配列arrの初期化:全て0の文字数分の要素数
char arr[(int)strlen(str)];
for(i = 0; i <= (int)strlen(str) - 1; ++i){
arr[i] = '0' + 0;
}
//どの文字が何回連続になっているかの測定
for(i = 0; i <= (int)strlen(str) - 1; ++i){
if(str[i] == str[i + 1]){
counter += 1;
}
if(i == (int)strlen(str) - 1){
arr[j] = str[(int)strlen(str) - 1];
//couterの数字を代入
if(counter >= 10){
arr[j + 1] = '0' + counter / 10;
arr[j + 2] = '0' + counter % 10;
j += 1;
}
else{
arr[j + 1] = '0' + counter;
}
}
if(str[i] != str[i + 1] && i != (int)strlen(str) - 1){
arr[j] = str[i];
//counterの数字を代入
if(counter >= 10){
arr[j + 1] = '0' + (counter / 10);
arr[j + 2] = '0' + (counter % 10);
j += 3;
}
else{
arr[j + 1] = '0' + counter;
j += 2;
}
counter = 1;
}
arr[j + 2] = '/';
}
for(i = 0; arr[i] != '/'; ++i){
printf("%c", arr[i]);
}
printf("\n");
return 0;
}
始めと終わり部分は正しいのですが、真ん中部分が誤った出力になってしまいます。
一定の範囲が常におかしいようです。
よろしくお願いします。

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教える店舗&オフィスのセキュリティ対策術
中・小規模の店舗やオフィスのセキュリティセキュリティ対策について、プロにどう対策すべきか 何を注意すべきかを教えていただきました!
-
c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。
C言語・C++・C#
-
C言語です このプログラムに自分で定義した関数を入れたいです! アドバイスください!
C言語・C++・C#
-
win10で、正確な待ち時間の作り方
C言語・C++・C#
-
-
4
S-JIS → JIS コード変換するには
C言語・C++・C#
-
5
ファイルがあるのにエクスプローラでは存在しない
C言語・C++・C#
-
6
visual studio 2019において、宣言していない変数があるのにエラーなくビルド出来ました
C言語・C++・C#
-
7
C言語について。
C言語・C++・C#
-
8
c言語 配列とポインタについて
C言語・C++・C#
-
9
C言語について。
C言語・C++・C#
-
10
プログラミング アルゴリズム
C言語・C++・C#
-
11
プログラミング c言語
C言語・C++・C#
-
12
C言語初心者です、、、お助けください
C言語・C++・C#
-
13
C言語でif文が予想と違う動きをする件について7
C言語・C++・C#
-
14
const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか
C言語・C++・C#
-
15
c言語でユーザ関数を利用して入力された文字列を反転させるプログラムを作りたいです。
C言語・C++・C#
-
16
C言語について。
C言語・C++・C#
-
17
C++のcase文の書き方
C言語・C++・C#
-
18
C言語 コマンドプロンプトについて。
C言語・C++・C#
-
19
stdio.hのバッファについて。
C言語・C++・C#
-
20
C言語の質問です if(a[0]>a[1]&&a[2]&&a[3]&&a[4]) {printf(“
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「指定されたキャストは有効で...
-
複数桁10進数の*桁目だけを抽出...
-
C言語での引数の省略方法
-
実数の整数部,小数部の取得
-
C言語 エラーの原因がわからな...
-
ラップ関数とはどんなものですか?
-
【C++】関数ポインタの使い方
-
c言語の配列を使ってサイコロを...
-
if と配列の組み合わせ
-
線形補間 2次元テーブル C言語...
-
「{ } で囲むだけ」は正しい?
-
DLLをGetProcAddress()で実行で...
-
read関数をノンブロッキングで...
-
(マルチスレッド)_beginthrea...
-
std::set<int> で、ある値が何...
-
直接選択法
-
数字列を3桁ごとにカンマで区切...
-
16進数の計算の仕方を教えて下さい
-
C言語の関数で戻り値を返す必要...
-
C#のコンパイルエラーCS0120に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「指定されたキャストは有効で...
-
C言語での引数の省略方法
-
複数桁10進数の*桁目だけを抽出...
-
#define _CRT_SECURE_NO_WARNIN...
-
ラップ関数とはどんなものですか?
-
実数の整数部,小数部の取得
-
【C++】関数ポインタの使い方
-
C言語 エラーの原因がわからな...
-
(マルチスレッド)_beginthrea...
-
if と配列の組み合わせ
-
system関数がうまくいかない
-
read関数をノンブロッキングで...
-
std::set<int> で、ある値が何...
-
式は定数値が必要です」という...
-
(int *)の意味
-
数字列を3桁ごとにカンマで区切...
-
「{ } で囲むだけ」は正しい?
-
int16_t の _t は何?
-
【至急】プログラムにエラーが...
-
systemの戻り値を取得する方法
おすすめ情報