将字符串转换为数字并排序的数组

Array of strings converted into numbers and sorted

本文关键字:排序 数组 数字 字符串 转换      更新时间:2023-10-16

作为初学者,我试图以单词形式输入一位数,但排序并显示为数字。

输入:

七三个五个一个nil

输出为

013.57我怎么能阻止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 sortedn";
     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 inputn";
     }
}
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 sortedn";
     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(){
    // 
}

words是一个大小为n的数组,这意味着单词的有效索引范围是从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++数组开始

0

  1. void input()中,for中不应该有i++, i应该从0开始?
  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 sortedn";
     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 inputn";
     }
}
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;
}