
求救高手,一个编程题!
题目的要求是这样的。。编一个程序从string对象中去掉标点符号。要求输入到程序的字符串必须含有标点符号,输出结果则是去掉标点符号后的string对象。下面是我写的代码,...
题目的要求是这样的。。编一个程序从 string对象中去掉标点符号。要求输入到程序的字符串必须含有标点符号,输出结果则是去掉标点符号后的string对象。 下面是我写的代码,运行之后出现一些奇怪的字符,想了半天也没想明白,虽然算法比较笨了点,但应该不会出错。希望高手指点。
#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
//待测字符串的输入
cout<<"请输入带有标点符号的字符串:"<<endl;
string str;//待测字符串
cin>>str;
const string::size_type size_of_str=str.size();//定义并确定待测字符串的大小
string::size_type size_of_str_punct=0;//定义待测字符串中标点符号的个数
//确定待测字符串当中含有标点的个数
for(string::size_type i=0;i<size_of_str;i++)
{
if(ispunct(str[i]))
{
size_of_str_punct++;
}
}
int sos=size_of_str;
int sosp=size_of_str_punct;
char *temp=new char[sos-sosp+1];
int k=0;
//给temp进行赋没有标点符号的赋值
for(string::size_type j=0;j<size_of_str;j++)
{
if(!ispunct(str[j]))
{
temp[k]=str[j];
k++;
}
}
string finalstr(temp);//定义并初始化了最终字符串对象 finalstr(无符号的字符串)
delete temp;//删除动态临时内存
//进行输出 没有标点符号的字符串
cout<<"输出没有标点符号的字符串:"<<endl;
cout<<finalstr<<endl;
return 0;
} 展开
#include<iostream>
#include<string>
using std::cout;
using std::cin;
using std::endl;
using std::string;
int main()
{
//待测字符串的输入
cout<<"请输入带有标点符号的字符串:"<<endl;
string str;//待测字符串
cin>>str;
const string::size_type size_of_str=str.size();//定义并确定待测字符串的大小
string::size_type size_of_str_punct=0;//定义待测字符串中标点符号的个数
//确定待测字符串当中含有标点的个数
for(string::size_type i=0;i<size_of_str;i++)
{
if(ispunct(str[i]))
{
size_of_str_punct++;
}
}
int sos=size_of_str;
int sosp=size_of_str_punct;
char *temp=new char[sos-sosp+1];
int k=0;
//给temp进行赋没有标点符号的赋值
for(string::size_type j=0;j<size_of_str;j++)
{
if(!ispunct(str[j]))
{
temp[k]=str[j];
k++;
}
}
string finalstr(temp);//定义并初始化了最终字符串对象 finalstr(无符号的字符串)
delete temp;//删除动态临时内存
//进行输出 没有标点符号的字符串
cout<<"输出没有标点符号的字符串:"<<endl;
cout<<finalstr<<endl;
return 0;
} 展开
展开全部
是输出一些乱码了吗?看如下程序段
31 int k=0;
32 //给temp进行赋没有标点符号的赋值
33 for(string::size_type j=0;j<size_of_str;j++)
34 {
35 if(!ispunct(str[j]))
36 {
37 temp[k]=str[j];
38 k++;
39 }
40 }
41 temp[k]='\0';
42
我想是由于你没在后面加一个字符串结束标志而造成的,在循环的后面加句temp[k]='\0';即可
31 int k=0;
32 //给temp进行赋没有标点符号的赋值
33 for(string::size_type j=0;j<size_of_str;j++)
34 {
35 if(!ispunct(str[j]))
36 {
37 temp[k]=str[j];
38 k++;
39 }
40 }
41 temp[k]='\0';
42
我想是由于你没在后面加一个字符串结束标志而造成的,在循环的后面加句temp[k]='\0';即可

2023-06-12 广告
单片机编程是指使用单片机编程语言,如C语言,来编写单片机的程序代码,以控制单片机的行为。这种技术在电子工程、计算机科学和电子通信等领域中被广泛应用。单片机编程的主要任务是设计和实现单片机的程序,包括定义单片机的指令系统、编写程序代码、处理器...
点击进入详情页
本回答由意法半导体(中国)投资有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询