当前位置:编程学习 > C/C++ >>

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++问题

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,