主题:C++中怎么样删除字符串中的数字!
aazham
[专家分:0] 发布于 2010-11-18 21:22:00
那位仁兄能把代码给我,小弟万分感谢。
不要用头文件里面包含的函数,
直接编写
回复列表 (共7个回复)
沙发
thuizh [专家分:60] 发布于 2010-11-18 22:45:00
将字符一个个提出来,判断ASCII码在48~57之间的就删除。
板凳
aazham [专家分:0] 发布于 2010-11-19 12:31:00
应该如何写呢?
3 楼
zm19870528 [专家分:0] 发布于 2010-11-19 13:30:00
char des[100];/*处理之后的字符串*/
void myfun(char *src)
{
int len=strlen(src),i,j;
for(j=0,i=0;i<len;i++)
{
if(!((src[i]>='0')&&((src[i]<='9')))
des[j++]=src[i];
}
des[j]='\0';
}
4 楼
萧__雅 [专家分:0] 发布于 2010-11-19 15:34:00
//STRQUE.H
#ifndef STRQUE_H
#define STRQUE_H
#include<iostream>
#include<string>
#include<queue>
using namespace std;
string seekint (string str1);
#endif
//seekint.cpp
#include"STRQUE.h"
string seekint(string str1) //
{ string str2;
queue<char> que;
int temp;
for(int i=0;i<str1.size();i++)
{ temp=str1[i];
if(!(temp<=57&&temp>=48))
{
que.push(str1[i]);
}
}
for(int j=0;!que.empty();j++)
{
str2+= que.front();
que.pop();
}
return str2;
}
//main.cpp
#include "STRQUE.h"
int main()
{
string str;
cout<<"请输入一字符串 :";
cin>>str;
str=seekint(str);
cout<<"处理后的字符串为:";
cout<<str<<endl;
return 0;
}
希望符合你的要求,如果有什么问题,楼主可以提出来……
5 楼
windy0will [专家分:2300] 发布于 2010-11-19 18:04:00
[code=c]
#include <stdio.h>
//#include <conio.h>
/*
下面2个宏,其实功能和内联函数差不多。 在宏中定义局部变量有几个好处:
1. 它允许宏参数有副作用
2. 如果把它定义为register变量,对提高效率有一定的好处
3. 对于({...}) 这样的语句的使用, 可以把一个宏 变得和函数一样,
这样,我们可以像使用函数一样来使用宏
*/
/*
这个宏的参数ch是一个字符。此宏用来判断字符ch是不是一个数字,或者是不是空字符。
宏的返回值: 1(如果是数字) -1(如果是空字符) 0(其他字符)
*/
#define is_digit_or_nul(ch) \
( {\
register int temp=(ch);\
('0'<=temp && temp<='9') ? (1) : (temp==0 ?-1 :0);\
} )
/*
这个宏的参数s是一个char*类型。使用宏以后,
字符串s里的数字将被删除。返回值是本次删除的数字的个数。
*/
#define del_digits_in_string(s) \
( {\
register char *s1=(char*)(s)-1, *s2=s1;\
for(;;){\
register int type = is_digit_or_nul(*++s1);\
if (type == 1) {continue;}\
if (type == 0) {*++s2=*s1; continue;}\
*++s2=0;\
break;\
}\
(int)(s1-s2);\
} )
int main(void)
{
char s[100] = "456ab!)f8AD0231~~ 97e:\"";
printf("\n删除前最原始的字符串:%s",s);
int count = del_digits_in_string(s);
printf("\n删除的数字字符的个数: %d\n删除数字以后的字符串:%s\n",count,s);
puts("\nexit");
//getch();
return 0;
}
[/code]
6 楼
josephkwok [专家分:530] 发布于 2010-11-19 19:20:00
宏还可以这样做啊...
不过不大建议这样做,因为
#define max(a,b) (a>b?a:b)
int a=3,b=4;
max(++a,b);
这样的结果出人意料...
7 楼
windy0will [专家分:2300] 发布于 2010-11-19 20:26:00
[quote]宏还可以这样做啊...
不过不大建议这样做,因为
#define max(a,b) (a>b?a:b)
int a=3,b=4;
max(++a,b);
这样的结果出人意料...[/quote]
#define max(a,b) (a>b?a:b)这样定义确实有问题,
但下面这样就不会有问题了
#define max(a,b) ({\
register int _a=(a), _b=(b);\
_a>_b ?_a :_b; })
在宏中使用({...})的结构可以允许宏参数有副作用,就像把a,b当做是函数的参数一样。如max(++a,b)和调用一个函数fmax(++a,b)一样。
【其中fmax是一个函数。 如int fmax(int a,int b){return a>b?a:b;}】
其实宏还有个用法,要详细的信息的话看看标准库的tgmath.h这个头文件
#define sqrt(x) \
(sizeof(x)==4 ? sqrtf(x) :\
sizeof(x)==8 ? sqrtd(x) : sqrtld(x))
float sqrtf(float );
double sqrtd(double);
long double sqrtld(long double);
我来回复