0
已解决
张恩泽
高级天翼
高级天翼
连续数字求和
题目详情
题目描述 Description
输入一个字符串(仅包含数字字符以及大小写字母),请你对于字符串中连续的数字求和,用和代替原来的数字输出,对于非数字字符,统计非数字字符连续出现的个数,用其个数代替原来的非数字字符输出。输出的数字之和与非数字字符个数之间用空格隔开。
比如,输入1234abc123
对于连续的数字段1234求和得到1+2+3+4=10;
对于连续的非数字字符段abc,求得其个数为3;
再对于连续的数字段123求和得到1+2+3=6。
所以应该输出10 3 6。
输入描述 Input Description
输入一个字符串(仅包含数字字符以及大小写字母)
输出描述 Output Description
如题
样例输入 Sample Input
1234abc123
样例输出 Sample Output
10 3 6
数据范围及提示 Data Size & Hint
字符串不超过10000个字符
这是阶段考试的题,题库里应该搜不到,所以你们就将就着看一下哈
#include<iostream>
#include<string>
using namespace std;
int main()
{
string s;
int sum=0;
int cnt=0;
cin>>s;
if(s[s.size()-1]>='0'&&s[s.size()-1]<='9')
{
s+="a";
}
else if((s[s.size()-1]>='a'&&s[s.size()-1]<='z')||(s[s.size()-1]>='A'&&s[s.size()-1<='Z']))
{
s+="1";
}
for(int i=0;i<s.size();i++)
{
if((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z'))
{
cnt++;
if(sum!=0&&(s[i-1]>='0'&&s[i-1]<='9'))
{
cout<<sum<<' ';
}
sum=0;
}
else if(s[i]>='0'&&s[i]<='9')
{
sum+=s[i]-'0';
if(cnt!=0&&(s[i-1]>='a'&&s[i-1]<='z'||s[i-1]>='A'&&s[i-1]<='Z'))
{
cout<<cnt<<' ';
}
cnt=0;
}
}
return 0;
}
本人20分代码
但是我怎么试都是对的,提交就WA了,啊!!!
大佬们帮帮忙!!
0
已采纳
何冯成
中级光能
中级光能
#include<iostream>
using namespace std;
int sum,cnt;
int main(){
string s;
getline(cin,s);
s=s+' ';
for(int i=0;i<=s.size()-1;i++){
if(s[i]>='0' && s[i]<='9' ){
sum+=s[i]-'0';
}
if(s[i]>='0'&&s[i]<='9' && s[i+1]<='z'&&s[i+1]>='A' || s[i]>='0'&&s[i]<='9' && s[i+1]==' '){
cout<<sum<<' ';
sum=0;
}
if(s[i]<='z'&&s[i]>='A'){
cnt++;
}
if(s[i]<='z'&&s[i]>='A' && s[i+1]>='0'&&s[i+1]<='9' ||s[i]<='z'&&s[i]>='A' && s[i+1]==' '){
cout<<cnt<<' ';
cnt=0;
}
}
return 0;
}
0
0
0
0
0
0
0
0
0