配列

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
momon

配列

#1

投稿記事 by momon » 9年前

文字列を入力し、配列に格納された文字列の奇数番目のみを出力させたいのですが、
奇数番目のみ出力されるようにやってみたのですが出力すらしてくれません。
問題点を教えてください。

よろしくお願いします。

コード:

#include<stdio.h>
#define MAX 100

int a(char *str1, char *str2);

int main(void)
{
	char str1[MAX], str2[MAX];
	int n;

	printf("文字列を入力\n");
	scanf("%s", str1);

	n = a(str1, str2);

	printf("%s\n", str2);
	printf("文字の数は%dです。\n", n);

	return 0;
}

int a(char *str1, char *str2)
{
	int i;

	i = 0;

	while (*(str1 + i) != '\0'){
		if (i % 2 == 1) break;
		*(str2 + i) = *(str1 + i);

	}
	*(str2 + i) = '\0';

	return i;
}

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 配列

#2

投稿記事 by みけCAT » 9年前

momon さんが書きました:出力すらしてくれません。
問題点を教えてください。
while文中でiを更新していないので、無限ループになっていますね。

修正案

コード:

#include<stdio.h>
#define MAX 100

int a(char *str1, char *str2);

int main(void)
{
	char str1[MAX], str2[MAX];
	int n;

	printf("文字列を入力\n");
	scanf("%s", str1);

	n = a(str1, str2);

	printf("%s\n", str2);
	printf("文字の数は%dです。\n", n);

	return 0;
}

int a(char *str1, char *str2)
{
	int i;

	i = 0;

	while ((i == 0 || *(str1 + i * 2 - 1) != '\0') && *(str1 + i * 2) != '\0'){
		*(str2 + i) = *(str1 + i * 2);
		i++;

	}
	*(str2 + i) = '\0';

	return i;
}
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

box
記事: 2002
登録日時: 14年前

Re: 配列

#3

投稿記事 by box » 9年前

とりあえずこんな感じ?

コード:

#include <stdio.h>
#define MAX (100)

int a(char *str1, char *str2);

int main(void)
{
    char str1[MAX], str2[MAX];
    int n;

    printf("文字列を入力\n");
    scanf("%s", str1);

    n = a(str1, str2);

    printf("%s\n", str2);
    printf("文字の数は%dです。\n", n);

    return 0;
}

int a(char *str1, char *str2)
{
    int i, j;

    for (i = j = 0; str1[i]; i++) {
        if (i % 2 == 1) str2[j++] = str1[i];
    }
    str2[j] = '\0';
    return j;
}
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: 配列

#4

投稿記事 by みけCAT » 9年前

オフトピック
boxさんが普通にC言語のコードを投稿している…最近にしては珍しい?
というわけで代わりに書いてみました。

コード:

# coding: UTF-8

def a(str1)
  str2 = str1.chars.each_slice(2).map { |o, _e| o }.join
  [str2.length, str2]
end

puts '文字列を入力'
str1 = gets.chomp
n, str2 = a(str1)
puts str2
printf "文字の数は%dです\n", n
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

閉鎖

“C言語何でも質問掲示板” へ戻る