leetcode:文字列操作


文書ディレクトリ

  • 文字列反転
  • 解題構想
  • コード実装
  • 文字列の単語数
  • 解題構想
  • 解題コード
  • stringをchar[]
  • に変換
  • strcpyの実装
  • コード実装
  • strncpyの実装
  • 文字列の反転


    問題を解く構想.


    文字列を配列に変換し、頭と尾からそれぞれ2つのポインタで遍歴交換します.

    コード実装


    テストアドレス
    class Solution {
    public:
        void reverseString(vector& s) {
            if( s.size() > 0 )
            {
                vector::iterator p = s.begin();
                vector::iterator q = s.end() -1;
                char tmp = ' ';
                while(p

    文字列内の単語数


    問題を解く構想.


    stringを最初から巡回し、スペースでなければflage=trueでスペースがあるときに単語を表すまでタグflageを作成して巡回します.最後にflageがtrueかどうかを判断し、trueであればcount++で、最後にスペースがないためです.

    解題コード


    テストアドレス
    class Solution {
    public:
        int countSegments(string s) {
            bool flage = false;
            int count = 0;
            int i = 0;
            while (s[i] != '\0')
            {
                if(s[i] != ' ') flage = true;
                if(flage && s[i] == ' ')
                {
                    count++;
                    flage = false;
                }
                i++;
            }
            if(flage) count++;
            return count;
        }
    };
    

    stringをchar[]に変換


    strcpyの実装


    コード実装

    char * strcpy( char *strDest, const char *strSrc ) 
    {
     assert( (strDest != NULL) && (strSrc != NULL) );  // 
     char *address = strDest;   //  char*, char*  
     while( (*strDest++ = * strSrc++) != ‘\0’ );   // strsrc strDest '\0'
     return address;
    }
    

    strncpyの実装

    char * strcpy( char *strDest, const char *strSrc, int n ) 
    {
     assert( (strDest != NULL) && (strSrc != NULL) );  // 
     char *address = strDest;   //  char*, char*  
     int i = 0;
     while( i++ < n && (*strDest++ = * strSrc++) != ‘\0’ );   // strsrc strDest '\0'
     if(strDest!='\0') strDest = '\0'; 
     return address;
    }