1. 找出字符串中第一个出现一次的字符
>代码展示:
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin >>s)
{
int count[26]={0};//定义一个计数数组
for(auto& i:s)//遍历字符串将出现的数字次数记录在数组相应的位置上
{
count[i-'a']++;
}
for(int i=0;i<s.size();++i)//拿到字符串中的字母在数组中相应的位置看其是否为1
{
if(count[s[i]-'a']==1)
{
cout<<s[i]<<endl;
break;
}
if(i==s.size()-1)
cout<<-1<<endl;
}
}
return 0;
}
2.反转字符串中的单词
先来分析一下题目意思就是给一个字符串中间的单词用空格隔开,我们要对里面的每个单词分别反转。
>代码展示:
class Solution {
public:
string reverseWords(string s) {
int start=0;
size_t pos=0;
while(start<s.size())
{
pos=s.find(' ',start);//找到空格位置
if(pos>s.size())
{
pos=s.size();
}
int i=start,j=pos-1;
while(i<j)//将每个单词逆置
{
swap(s[i],s[j]);
++i;
--j;
}
start=pos+1;
}
return s;
}
};
3.字符串相乘
分析:
代码展示:
class Solution {
public:
string multiply(string num1, string num2) {
int end1=num1.size()-1,end2=num2.size()-1;
//相乘的结果位数不能超过两个数的位数和
vector<int> res(end1+end2+2,0);
for(int i=end1;i>=0;--i)
{
for(int j=end2;j>=0;--j)
{
int mul=(num1[i]-'0')*(num2[j]-'0');
//乘积在res中的对应位置
int p1=i+j,p2=i+j+1;
int sum=mul+res[p2];
res[p2]=sum%10;
res[p1]+=sum/10;
}
}
//如果有前置零则往后走
int i=0;
while(i<res.size()&&res[i]==0)
++i;
//拆解在字符串中
string str;
for(;i<res.size();++i)
{
str+=('0'+res[i]);
}
return str.size()==0?"0":str;
}
};