How to use string.substr() function?

后端 未结 7 454
夕颜
夕颜 2020-11-29 06:40

I want to make a program that will read some number in string format and output it like this: if the number is 12345 it should then output 12 23 34 45 . I tried using the su

相关标签:
7条回答
  • 2020-11-29 06:41

    As shown here, the second argument to substr is the length, not the ending position:

    string substr ( size_t pos = 0, size_t n = npos ) const;

    Generate substring

    Returns a string object with its contents initialized to a substring of the current object. This substring is the character sequence that starts at character position pos and has a length of n characters.

    Your line b = a.substr(i,i+1); will generate, for values of i:

    substr(0,1) = 1
    substr(1,2) = 23
    substr(2,3) = 345
    substr(3,4) = 45  (since your string stops there).
    

    What you need is b = a.substr(i,2);

    You should also be aware that your output will look funny for a number like 12045. You'll get 12 20 4 45 due to the fact that you're using atoi() on the string section and outputting that integer. You might want to try just outputing the string itself which will be two characters long:

    b = a.substr(i,2);
    cout << b << " ";
    

    In fact, the entire thing could be more simply written as:

    #include <iostream>
    #include <string>
    using namespace std;
    int main(void) {
        string a;
        cin >> a;
        for (int i = 0; i < a.size() - 1; i++)
            cout << a.substr(i,2) << " ";
        cout << endl;
        return 0;
    }
    
    0 讨论(0)
  • 2020-11-29 06:49

    Possible solution with string_view

    void do_it_with_string_view( void )
    {
        std::string a { "12345" };
        for ( std::string_view v { a }; v.size() - 1; v.remove_prefix( 1 ) )
            std::cout << v.substr( 0, 2 ) << " ";
        std::cout << std::endl;
    }
    
    0 讨论(0)
  • 2020-11-29 06:55

    If I am correct, the second parameter of substr() should be the length of the substring. How about

    b = a.substr(i,2);
    

    ?

    0 讨论(0)
  • 2020-11-29 06:57

    You can get the above output using following code in c

    #include<stdio.h>
    #include<conio.h>
    #include<string.h>
    int main()
    {
      char *str;
      clrscr();
      printf("\n Enter the string");
      gets(str);
      for(int i=0;i<strlen(str)-1;i++)
      {
        for(int j=i;j<=i+1;j++)
          printf("%c",str[j]);
        printf("\t");
      }
      getch();
      return 0;
    }
    
    0 讨论(0)
  • 2020-11-29 06:57

    Possible solution without using substr()

    #include<iostream>
    #include<string>
    
    using namespace std;
    
    
    int main() {
        string c="12345";
        int p=0;
    
        for(int i=0;i<c.length();i++) {
            cout<<c[i];
            p++;
    
            if (p % 2 == 0 && i != c.length()-1) {
                cout<<" "<<c[i];
                p++;
            }
        }
    }
    
    0 讨论(0)
  • 2020-11-29 06:58

    Another interesting variant question can be:

    How would you make "12345" as "12 23 34 45" without using another string?

    Will following do?

        for(int i=0; i < a.size()-1; ++i)
        {
            //b = a.substr(i, 2);
            c = atoi((a.substr(i, 2)).c_str());
            cout << c << " ";
        }
    
    0 讨论(0)
提交回复
热议问题