1

文字列を与える C のプログラムがあるとします。たとえば、「stackoverflow rocks」です。

ここで、たとえば、文字列に「o」という文字が何回出現するかをカウントする関数を Assembly で作成したいと考えています。

この関数は C プログラムで呼び出されます。

これを作成するプログラムをCで作成し、フラグ-sを介してアセンブリに変換することを考えていました。

[編集] わかりました、私はこれをしました:

#include<stdio.h>

int FindChar(char *ptr, char toFind);

int FindChar(char *ptr, char toFind){

    int num;

    for (int i=1; ptr[i]=0; i++)
        if (ptr[i] = toFind){
            num++;
        }

    return(num);
}

int main ( ) {

    char str[]=”stackoverflow rocks”; 
    char tf=”o”; 
    printf(“It appears %d times \n”, FindChar(str,tf));
}

私の機能の何が問題になっていますか?

4

1 に答える 1

1

代替の二重引用符文字がエラーを引き起こしていると思いますchar tf。また、文字列ではなく文字であるため、初期化には二重引用符ではなく単一引用符を使用する必要があります。

harold以前に指摘したように、 は である=必要がある==ため、比較として適切に機能します。

追加の変数も必要ありませんi。ポインターを進めるだけで済みます。とにかくアセンブリコードが必要なので、少し短くする必要があり、技術的にも効率的です。

このコードはエラーを修正し、機能的にも健全なはずです。

#include<stdio.h>

int FindChar(char *ptr, char toFind);

int FindChar(char *ptr, char toFind){
  int num = 0;
  for ( ; *ptr != '\0'; ++ptr)
    {
      if (*ptr == toFind){
        ++num;
      }
    }
  return(num);
}

int main ( ) {
  char str[]="stackoverflow rocks";
  char tf='o';
  printf("It appears %d times \n", FindChar(str,tf));
}
于 2013-04-15T16:48:51.750 に答える