1

初心者で一桁の数字をワード形式で入力しようとしているのですが、並べ替えて数字として表示します。

入力時:

セブン スリー ファイブ ワン ニル

出力は

0 1 3 5 7 最初に 0 が表示されず、num 配列に入力されないようにするにはどうすればよいですか?

#include <iostream>
#include <algorithm>
#include <string>
#define n 5
using namespace std;

string words[n];
int nums[n],size;
void input(){
     cout<<"Enter in word form, the numbers to be sorted\n";
     for( int i = 0;  ; i++){
         cin >> words[i];
         if( words[i] == "nil" )
             break;
     }
     size = sizeof words/sizeof(string);
}
void convert(){
     for( int i = 0; words[i]!= "nil" ; i++ ){
          if ( words[i] == "one" )
             nums[i] = 1;
          //
          else 
               cout<<"Wrong input\n";
     }
}
void sort(){
     sort(nums, nums + size);
     for ( int i = 0; i < size; i++ )
         cout<< nums[i]<<endl;
}
int main(){
    input();
    convert();
    sort();
    system("pause");
    return 0;
}

これは正常に機能します。単語の長さを間違えました.ソートの考慮から要素 nil (センチネルとして使用) を削除するには、サイズを 1 減らす必要がありました。このコードは問題なく動作し、意図したとおりに動作します。

 //headers and std

string words[n];
int nums[n],size;
void input(){
     cout<<"Enter in word form, the numbers to be sorted\n";
     for( int i = 0; ; i++){
         cin >> words[i];
         if ( words[i] == "nil" )
            break;
     }
     size = sizeof words/sizeof(string) - 1;//one for nil
}
void convert(){
     for( int i = 0; words[i]!= "nil" ; i++ ){
          if ( words[i] == "one" )
              nums[i] = 1;
          else if ( words[i] ==  "two") 
           //
     }
}
void sort(){
     sort(nums, nums + size);
     for ( int i = 0; i < size; i++ )
         cout<< nums[i]<<endl;
}
int main(){
    // 
}
4

2 に答える 2

1

words はサイズ n の配列です。これは、words の有効なインデックスが 0 から n - 1 までであることを意味します。コードはインデックス 1 から n を使用します。したがって、この

string words[n];
...
for( int i = 1;  ; i++){
...
for( int i = 1; i<= n; i++ ){
      if ( words[i] == "one" )
...
for ( int i = 1; i <= n; i++ )
     cout<< nums[i]<<endl;

これであるべき

string words[n];
...
for( int i = 0;  ; i++){
...
for( int i = 0; i < n; i++ ){
      if ( words[i] == "one" )
...
for ( int i = 0; i < n; i++ )
     cout<< nums[i]<<endl;

C++ では、配列はゼロから始まります。

于 2013-05-03T06:58:12.640 に答える
0
  1. では、アウトはvoid input()ありませんか?そして、0 から開始する必要がありますか?i++fori
  2. の致命的なエラーvoid convert() for( int i = 1; i<= n; i++ )。単語を と定義しているため、 からまでstring[5]開始する必要があります。そうです。words[0]words[4]nums[5]

修正コード:

#include <iostream>
#include <algorithm>
#include <string>
#define n 5
using namespace std;

string words[n] = {};
int nums[n];
void input(){
     cout<<"Enter in word form, the numbers to be sorted\n";
     for( int i = 0; i<n ; i++){
         cin >> words[i];
         if( words[i] == "nil" )
             break;
         //i++;
     }
}
void convert(){
     cout<<"n = "<<n<<endl;
     for( int i = 0; i<n; i++ ){
          if ( words[i] == "one" )
             nums[i] = 1;
          else if ( words[i] ==  "two")
             nums[i] = 2;
          else if ( words[i] == "three")
             nums[i] = 3;
          else if ( words[i] == "four")
             nums[i] = 4;
          else if ( words[i] == "five")
             nums[i] = 5;
          else if ( words[i] ==  "six")
             nums[i] = 6;
          else if ( words[i] ==  "seven")
             nums[i] = 7;
          else if ( words[i] == "eight")
             nums[i] = 8;
          else if ( words[i] ==  "nine")
             nums[i] = 9;
          else if ( words[i] ==  "zero")
             nums[i] = 0;
          else
               cout<<"Wrong input\n";
     }
}
void sort(){
     sort(nums, nums + n);
     for ( int i = 0; i < n; i++ )
         cout<< nums[i]<<endl;
}
int main(){
    input();
    cout <<"after input" <<endl;
    convert();
    cout <<"after convert" <<endl;
    sort();
    system("pause");
    return 0;
}
于 2013-05-03T07:12:21.470 に答える