スペースをなくす関数を作ってみた

abcde
記事: 0
登録日時: 14年前

スペースをなくす関数を作ってみた

投稿記事 by abcde » 14年前

C言語で、入力されたパラメータ(文字列)に含まれる空白を取り除く関数を作ってみた。
Visual Basic に見るような Replace関数 がないとかで・・・。

意味もなくアドレスを返しています。

CODE:

char* cutspace(char str[EXP_LENGTH]) {
  char resstr[EXP_LENGTH] = "";
  int i, j;

  for(i = 0, j = 0; str[i]; i++) {
    if(str[i] != ' ') {
      resstr[j] = str[i];
      j++;
    }
  }
  resstr[j] = '\0';
  strcpy(str, resstr);

  return str;
}
かなり悩んで、地道に1文字ずつ代入した後ですべてコピーすることにした。
みなさんは、もっとエレガントにやるんですよね・・・(・ω・`)

ISLe
記事: 2650
登録日時: 15年前

Re: スペースをなくす関数を作ってみた

投稿記事 by ISLe » 14年前

引数の文字列書き換えて良いなら

CODE:

#include 
char *cutspace(char str[])
{
	int i, j;
	i = j = 0;
	while (str[i] = str[j++]) {
		if (str[i] != ' ') i++;
	}
	return str;
}
int main(void)
{
	char str[] = "I love programming.";
	printf("[%s]\n", cutspace(str));
	return 0;
}
ではどうでしょう。

abcde
記事: 0
登録日時: 14年前

Re: スペースをなくす関数を作ってみた

投稿記事 by abcde » 14年前

ISLeさん、無駄がないですね。
アドバイスありがとうございます! d(・▽・*)

↓こんなのも教えてもらったりしました。

CODE:

void cutspace(char *test)
{
  char *p,c ;
  p = test ;

  while ((*p = *test++) != '\0') {
    if (*p != ' ') p++ ;
  }
}
そしてmainまで書いてくださってありがとうございます。
実はmainはこんな感じです。
まだまだ変わっていく予定です。(完成するまでだいぶかかる見通しです。)


CODE:

/* いろいろと省略してある */

#decine EXP_LENGTH 128

int main(int argc, char *argv[]) {
  char exp[EXP_LENGTH] = "\0";
  int i;

  if(argc == 0) {
    // no parameter
  } else {
    for(i = 1; i < argc; i++) {
      if(strlen(exp) + strlen(argv[i]) < EXP_LENGTH) {
        cutspace(argv[i]);
        strcat(exp, argv[i]);
      }else{
        return 0;
      }
    }
    printf("%s\n", exp);
  }

  return 0;
}
コマンドラインで小数の計算ができたら便利だと思い、
 スペースで区切られた文字をくっつける
  ↓
 途中に含まれているかもしれないスペースを取り除く
  ↓
 完成したスペースなしの文字(式)を読み込んで計算していく
ということを考えています。

・・・これだと 3 4 + 3 って入力したら 34+3 になるのか・・・(・・;)

abcde
記事: 0
登録日時: 14年前

Re: スペースをなくす関数を作ってみた

投稿記事 by abcde » 14年前

↑#decine は #define の間違いです。