【华为机试】按字节截取字符串

来源:互联网 发布:c语言数组存储方式 编辑:程序博客网 时间:2024/06/06 06:55

题目描述

编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF"6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

输入描述:

输入待截取的字符串及长度

输出描述:

截取后的字符串

分析一:先输出前n-1个字符,在看最后一个字符的ASCII是大于等于0的,还是小于0的,小于0的表示汉字。大于等于0时直接输出,小于0时先看前面小于0的个数是奇数还是偶数,奇数输出,偶数不输出。

#include <iostream>#include <string>using namespace std;int main(){string s;int a;while(cin>>s>>a){if(a==0||s.size()<a)  continue;int i=0;while(i<a-1)  //输出前a-1个字节;cout<<s[i++];if(s[i]<0)  {  //判断最后一个字节是否输出;int k=0;for(int j=i-1;j>=0;--j){if(s[j]<0) ++k;}if(k%2==1)  cout<<s[i]<<endl;   //如果前面有单数个<0的字节,输出最后一个字节;else cout<<endl;}else cout<<s[i]<<endl;}return 0;}

分析二:输出string时,里面包含了判断最后一个字符的是否是汉字的情况,所以直接输出前n个字符就行了。

include <iostream>#include <string>using namespace std;int main(){string s;int n;while(cin>>s>>n){for(int i=0;i<n;++i)cout<<s[i];cout<<endl;}return 0;}


原创粉丝点击