c++编程问题
1.编写一个程序,将字符数组S2中的全部字符拷贝到字符数组S1中。不用strcpy函数。拷贝时,‘\0’也要拷贝过去,‘\0’后面的字符不拷贝。
2.
输入一段英文,将其格式化后输出。
格式化的要求是:
(1) 每一个单词首字母大写,其余字母小写;
(2) 所有标点符号(. , ! ?)均改为句号;
(3) 非英文字母作为非法字母去除。
如输入:i am a 54stuDe#Nt12, right?
则输出:I Am A Student. Right.
3.将输入的 2进制数(一个非“0”即“1”的字符串)化为 10进制数并输出结果。
请高手们指教下这三题,谢谢了!
补充:忘记说了,我是个初学者,指针还没学完,所以希望用单纯的数组的方法,程序尽量通俗易懂吧,再次感谢!!
答案:#include<iostream>
#include<string>using namespace std;
int sub(int n)
{
if(n==0)
return 1;
else
return 2*sub(n-1);
}
int main()
{
cout<<"第一个问题:"<<endl;
/*1.编写一个程序,将字符数组S2中的全部字符拷贝到字符数组S1中。不用strcpy函数。拷贝时,‘\0’也要拷贝过去,‘\0’后面的字符不拷贝。*/
char S1[8];
char S2[8]={'O','t','h','e','r','\0','a'};
for(int i=0;i!=6;i++)
S1[i]=S2[i];
cout<<"S2: "<<S2<<endl;
cout<<"S1: "<<S1<<endl;
cout<<"\n\n\n\n"<<endl;
// 具体的我也不懂,除了strcpy,C++里有strncpy函数。C风格的字符串遇到'\0'就自动停止。
cout<<"第二个问题:"<<endl;
/*2.
输入一段英文,将其格式化后输出。
格式化的要求是:
(1) 每一个单词首字母大写,其余字母小写;
(2) 所有标点符号(. , ! ?)均改为句号;
(3) 非英文字母作为非法字母去除。
如输入:i am a 54stuDe#Nt12, right?
则输出:I Am A Student. Right. */
string s="a";
//getline(cin,s); //读取一行的输入,如果是多行,我也不知道如何做了。
cout<<endl;
cout<<endl;
cout<<"字符串s的值:"<<endl;
cout<<s; //验证字符串是否输入正确
cout<<endl;
int slen=s.length(); //求出s开始的长度,以便对s进行操作。
cout<<"首先将字符串中的非法字符(非英文字母和标点)去除: "<<endl;
string s2;
for(int i=0;i!=slen;i++)
{
if(s[i]=='.'||s[i]==','||s[i]=='!'||s[i]=='?'||('a'<=s[i]&&s[i]<='z')||('A'<=s[i]&&s[i]<='Z')||s[i]==' ')
s2.push_back(s[i]);
//剔除非法字符
}
cout<<s2;
cout<<"\n\n\n\n下面开始转化标点和大小写:"<<endl;
int j=s2.length(); //用j存储s2的长度
for(int i=0;i!=j;i++)
{
if(i==0)
{
if('a'<=s2[i]&&s2[i]<='z')
s2[i]=s2[i]-32; //如果第一个字符是字母,那么就把它转换成大写字母
}
else
{
if(s2[i]=='.'||s2[i]==','||s2[i]=='!'||s2[i]=='?')
s2[i]='.'; //如果碰见标点,都转换成句号。
if(('a'<=s2[i]&&s2[i]<='z')&&(s2[i-1]==' '||s2[i-1]=='.'))
s2[i]=s2[i]-32; //如果碰见小写字母 ,并且其前面是空格或者句号标点, 那么把它转化成大写字母
if(('A'<=s2[i]&&s2[i]<='Z')&&(('a'<=s2[i-1]&&s2[i-1]<='z')||('A'<=s2[i-1]&&s2[i-1]<='Z')))
s2[i]=s2[i]+32; //如果碰见大写字母,并且其前面是大小写字母的时候,转换其成小写字母
}
}
cout<<s2;
cout<<"\n\n\n\n"<<endl;
cout<<"第三个问题:"<<endl;
/*
3.将输入的 2进制数(一个非“0”即“1”的字符串)化为 10进制数并输出结果。
请高手们指教下这三题,谢谢了!
*/
string s3; //用s3保存你输入的字符串
/*while(cin>>s3)
for(int i=0;i!=s3.length();i++)
{
if(s3[i]!='1'&&s3[i]!='0')
{
cout<<"你输入的字符串不是二进制数,请重新输入,确保每一位都是0或者1:"<<endl;
break;
}
}*/
//本来想写一个纠错的代码,可是发现写出来有问题,会一直无法完成输入,没办法啦。
cin>>s3;
cout<<"十进制数为:";
int sum=0;
for(int i=0;i!=s3.length();i++)
{
if(s3[i]=='1')
sum=sum+sub(s3.length()-i-1);
}
cout<<sum<<endl;
return 0;
}
我在VS2010上运行正常。不过中间很繁琐。
上一个:怎么样学习c++
下一个:求教C++问题