1

こんにちは、誰かがこのコードの問題点を指摘してくれませんか?

#include <stdio.h>
int convstrg(char* str) {
   int output = 0;
   char* p = str;
   for (int i=0;str[i]!='\0';i++) {
      char c = *p++;
      if (c < '0' || c > '9')
        continue;
      output *= 10;
      output += c - '0';
   }   
   return output;
}

int main(){
    char x[] = "1xx23";
    printf("%d\n", convstrg(x));
    return 0;
}

出力が文字列整数の場合、コードは整数を返す必要があります。しかし、0などの奇妙な数字を取得しているようです。

これはいくつかのテストケースであり、一部は機能し、一部は機能しませんでした

"123" -> 123
"23xyz" -> 23
"" -> 0
"abc" -> 0
"-1" -> -1

ありがとう

編集

さて、負の文字列を除いてすべてのケースを整理します..

4

1 に答える 1

2
  • 先頭の文字が正しいかどうかを確認することは決して-ないため、負の数が正しく解析されるとは期待できません。
  • 続行するのではなく中断 する必要があります。そうしないと、からの解析された値が非常に奇妙になります。if (c < '0' || c > '9')12xyz123
  • 文字列から整数を解析する組み込み関数があることをご存じでしょうstd::atoistd::stringstream詳しくはこちらをご覧ください。
  • boost::lexical_cast次のようにサードパーティのライブラリを使用することもできますboost::lexical_cast<int>(x)
于 2013-09-27T08:14:48.657 に答える