回 帖 发 新 帖 刷新版面

主题:C++中怎么样删除字符串中的数字!

那位仁兄能把代码给我,小弟万分感谢。
不要用头文件里面包含的函数,
直接编写

回复列表 (共7个回复)

沙发

将字符一个个提出来,判断ASCII码在48~57之间的就删除。

板凳


应该如何写呢?

3 楼

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 楼

//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 楼

[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 楼

宏还可以这样做啊...
不过不大建议这样做,因为

#define max(a,b) (a>b?a:b)

int a=3,b=4;
max(++a,b);

这样的结果出人意料...

7 楼

[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);

我来回复

您尚未登录,请登录后再回复。点此登录或注册