前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——5.string

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——5.string

作者头像
用户11286441
发布2024-09-23 19:26:33
630
发布2024-09-23 19:26:33
举报
文章被收录于专栏:学习

1.字符串相乘

. - 力扣(LeetCode)

思路: 1.如果两个串有一个首元素为‘0’,则直接返回‘0’ 2.设置两层循环,内层第一次循环 用于str插入初始数据 (num2 的各个元素和num1 的最后一个元素相乘的结果) 3.若存在内层第二次循环,则用num2 的各个元素和num1 的倒数第二个元素相乘 依次与str相应位置进行相加,若超出str.size(),则改用push_back进行尾插 4.最后进行reverse(str.begin(),str.end()) 倒置字符串

代码语言:javascript
复制
class Solution {
public:
    string multiply(string num1, string num2) {
        string str;
        int flag=0;
        int num=0;
        int begin1=0;
        int begin=0;

      if(num1[0]=='0'||num2[0]=='0')
     { str='0';
      return str;}

      for(int i=num1.size()-1;i>=0;i--)
      {  
         for(int j=num2.size()-1;j>=0;j--)
         {
            if(i==num1.size()-1)
            {
                num=(num1[i]-'0')*(num2[j]-'0')+flag;
               if(num>9)
               flag=num/10;
               else
               flag=0;
               str.push_back(num%10+'0');
               if(j==0&&flag!=0)
               {
                 str.push_back(flag+'0');
                 flag=0;
               }
            }
             
            else
            {
                num=(num1[i]-'0')*(num2[j]-'0')+flag;
                 if(begin<=str.size()-1) 
                  num=num+str[begin]-'0';
                 if(num>9)
                 flag=num/10;
                 else
                 flag=0;
                 if(begin<=str.size()-1) 
                 str[begin]=num%10+'0';
                 else
                 str.push_back(num%10+'0');
                 if(j==0&&flag!=0)
                 {
                   str.push_back(flag+'0');
                   flag=0;
                 }
                 begin++;

            }
        }
        begin1++;
        begin=begin1;
      }

      reverse(str.begin(),str.end());
      return str;

    }
};

2.反转字符串中的单词

. - 力扣(LeetCode)

思路: 1.使用迭代器string::iterator j= s.begin();取的首元素位置 2. for(;i<=s.size();i++) 如果 s[i]为‘ ’或i==s.size() reverse(j,j+flag); //左闭右开 !!!!!!!!!!! j=j+flag+1; //j跳过‘ ’ flag=0; 3. else flag++;

代码语言:javascript
复制
class Solution {
public:
    string reverseWords(string s) {
     int i=0;
     int flag=0;
     string::iterator j= s.begin();

     while(*j==' ')
        j++;
     for(;i<=s.size();i++)
     {
        if(s[i]==' '||i==s.size())
       { 
        reverse(j,j+flag);    //左闭右开
        j=j+flag+1;
        //i++;
        flag=0;
      }
      
      else
      flag++;
      }
      return s;


     }
};

3.字符串中第一个只出现一次的字符

. - 力扣(LeetCode)

思路: 1.因为字符串中字符种类较少,可以借用计数排序的想法 2. int arr[26]={0};//一共有26个字母 3.//范围for for(auto ch :s) { arr[ch-'a']++; //每出现一次该字符则在arr相应位置处++; } 4. for(int i=0;i<s.size();i++) { if(arr[s[i]-'a']==1) { return i; //遍历s,若arr相应处为1,则为第一个出现一次的字符 } }

代码语言:javascript
复制
class Solution {
public:
    int firstUniqChar(string s) {
    int arr[26]={0};
  for(auto ch :s)
  {
    arr[ch-'a']++;
  }
  for(int i=0;i<s.size();i++)
 {
   if(arr[s[i]-'a']==1)
   {
    return i;
   }
 }
   return -1;

    }
};

4.把字符串转为整形

. - 力扣(LeetCode)

代码语言:javascript
复制
class Solution {
public:
    int myAtoi(string str) {
   int i = 0;
int flag = 1;
int flag2=0;
long long num = 0;          //pow(2,31)很大,必须用long long类型存储
while(str[i]==' ')
    i++;                    //跳过前面的‘ ’

for (; i < str.size(); i++)
{

    if (str[i] != ' ')
    {
        if (str[i] == '-'&&(str[i+1] >= '0' && str[i+1] <= '9')) //必须保证‘+’ 后必须是数字才能确定符号
           {
            if(flag2)      //flag2的作用是防止“1200-12”这种类型多次读取
             break;
             flag = 0;
             flag2=1;
           }

        else if (str[i] == '+'&&(str[i+1] >= '0' && str[i+1] <= '9'))//同理
            {
                if(flag2)
                break;
                flag = 1;
                flag2=1;
            }

        else if((str[i] < '0' || str[i] > '9'))    //如果为字符则直接终止循环
        break;               

       if (str[i] >= '0' && str[i] <= '9')
       {
         flag2=1;
         num = num * 10 + str[i] - '0';
        if(flag)
       {
        if(num>pow(2,31)-1)    //判断是否越界
        {
            num=pow(2,31)-1;
            break;
        }
       }
       else{
        if(num>pow(2,31))
        {
            num=pow(2,31);    //判断是否越界
            break;
        }
       }
       }
     
    }
    else
    break;

}
if (flag)
    return num;
else
    return -num;
    }
};

5.反转字符串(错题反思)

. - 力扣(LeetCode)

官方答案:

代码语言:javascript
复制
class Solution {
public:
    string reverseStr(string s, int k) {
    int n = s.length();
        for (int i = 0; i < n; i += 2 * k) {
            reverse(s.begin() + i, s.begin() + min(i + k, n));
        }
        return s;
    }
};
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.字符串相乘
  • 2.反转字符串中的单词
  • 3.字符串中第一个只出现一次的字符
  • 4.把字符串转为整形
  • 5.反转字符串(错题反思)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档