注册 登录
编程论坛 C++教室

[求助]字符串处理方面的问题

kkndkknd01 发布于 2013-01-22 07:39, 640 次点击
#include <stdio.h>  
#include <stdlib.h>
#include <ctype.h>  
#include <iostream>
#include<string.h>
using namespace std;
char escapechar()
{
      int a;
  int i;  
  char* ptr= new char[50];
  char* const str = ptr;
  cout<<"please enter words\n";
  gets(ptr);
  a=strlen(str);
    for(i=0;i<a;i++)
  {
      
      if(str[i]==' ')
          cout<<"\\s";
      else if(str[i]=='\n')
          cout<<"\\n";
      else if(str[i]=='\r')
          cout<<"\\r";
      else if(str[i]=='\t')
          cout<<"\\t";
      else if(isdigit(str[i] ))
          cout<<"\\"<<str[i];
      else
      cout<<str[i];
  }
  delete [] ptr;
  system("pause");
  return 0;  
}
int main ()  
{  
    escapechar();
}  

写了一个小程序,但最后老师要求要用一个string类型的变量输出,我怎么也没办法把escapechar中cout的内容放进去,求各位帮帮忙
12 回复
#2
rjsp2013-01-22 08:46
如果要说错误,实在多得是一无是处
1. 一大把用不到的头文件,还不是C++格式
2. escapechar()竟然包含了输入处理和输出,你是在烧杂烩汤呀
3. 你这个escapechar()返回char,可以算着奇葩一枚
4. 还没用到的变量就定义到头部,连C语言现在都反对这么做
5. new个char[50],然后再把它删除。你以为自己在用烂逼的Java还是烂逼的.Net?
6. 定义个和ptr一样的str干什么?难道是做克隆人
7. gets(ptr) 我不反对你在C++用C函数,但最好能保持前后文风格一致,不要一半脸擦白,一半脸擦红。当然,这不是主要的,主要的是你干嘛偏偏选个已经被C11废弃的C函数?
8. gets(ptr) 能读进\r和\n吗?那你后面的for中处理\r和\n是想做鬼脸给瞎子看?
9. 我告诉你一个地球人都知道的秘密,strlen的返回类型是size_t,sizeof表达式的类型也是size_t,因为它们是不可能为负的,所以不能选个可以为负的类型
10. system("pause"); --- 我已经懒得对system("pause")的人再说些什么
#3
kkndkknd012013-01-22 08:49
回复 2楼 rjsp
新手这么招人恨啊,真不好意思
#4
pangding2013-01-22 12:19
楼主可以去查查 stringstream 的东西,也许是改造你这个程序最省事的方法。
#5
waterstar2013-01-23 17:12
回复 2楼 rjsp
system("pause");有什么害处吗?
#6
TonyDeng2013-01-23 17:22
以下是引用waterstar在2013-1-23 17:12:03的发言:

system("pause");有什么害处吗?

打倒微软!!!
#7
waterstar2013-01-23 17:40
回复 6楼 TonyDeng
和微软有什么关系?
#8
TonyDeng2013-01-23 17:43
pause是DOS和cmd才有的系统内部指令,正如那些用system("cls")来清屏和system("color xxx")来设置文本颜色的做法一样,等于写批处理。
#9
zklhp2013-01-23 17:45
以下是引用TonyDeng在2013-1-23 17:22:27的发言:


打倒微软!!!

大牛竟然这么说 好惊讶啊。。
#10
TonyDeng2013-01-23 17:51
我是替别人说,哈哈~
#11
waterstar2013-01-23 18:19
回复 8楼 TonyDeng
明白了,谢谢!我习惯用getchar来弄。
#12
TonyDeng2013-01-23 18:27
其实对控制台程序来说,是不需要pause的,那只在IDE中调试程序时才有用。CUI程序写好,本身就该在控制台中用行命令启动,结束后就直接呆在控制台中,不需要这样暂停。用cls或color还是情有可原的,那毕竟是与平台有关的东西,就算不用system(),也要用API,本身就没可移植性可言。

system()函数其实算是C库的内部函数,原本不会降低执行效率的,但最近我发现在Win7/Win8上执行system()稍有点迟滞。
#13
waterstar2013-01-23 19:27
回复 12楼 TonyDeng
谢谢解释了这么多,小菜鸟一个也没想着去研究这么深奥的东西。
1