问各位c++如何拿出char数组中的每个字符,然后进行判断,新手。

disalong 2014-05-19 04:53:39
项目要做一个例子,是java客户端调用c++ socket服务器,在c++服务器端用以下的代码接收客户端传过来的内容:



已经确定char data[]数组中接收到内容了,现在我要遍历这个char数组里面的每个字符,进行判断,比如char数组里面
是“000423”,我只想得到“423”,或者“002334”,我只想得到“2334”,那么我就遍历char数组,取非“0”的字符,所以现在的
问题是如何遍历char数组中的每个字符,和“0”进行比较,取得非0的字符,然后顺便转换成int(因为我最终还是想得到那个
数字,而不是字符串)?

这应该是非常基础的问题,但是我没有c++基础,网上的内容看到头晕,希望在这里得到各位的帮助,我给分是很爽手的,收到满意答案就结贴,谢谢大家。
...全文
1731 18 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
银霜覆秋枫 2015-05-26
  • 打赏
  • 举报
回复
引用 14 楼 zhao4zhong1 的回复:
#include <stdio.h>
char s1[]="000423";
char s2[]="002334";
char s3[]="000000";
char s4[]="0000aa";
int i1,i2,i3;
char ss4[256];
int main() {
    sscanf(s1,"%d",&i1);
    printf("%d\n",i1);
    sscanf(s2,"%d",&i2);
    printf("%d\n",i2);
    sscanf(s3,"%d",&i3);
    printf("%d\n",i3);

    sscanf(s4,"%*[0-9]%s",ss4);
    printf("%s\n",ss4);
    return 0;
}
//423
//2334
//0
//aa
//
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
顶~
bobo_包子 2014-05-20
  • 打赏
  • 举报
回复
引用 16 楼 lm_whales 的回复:
Java char 是16Bits
No problem here.
lm_whales 2014-05-20
  • 打赏
  • 举报
回复
Java char 是16Bits
原点丹枫 2014-05-20
  • 打赏
  • 举报
回复
#include <iostream> #include <string> #include <sstream> using namespace std; int main(){ string str=null; int a; for(int i=0;i<recevlength;i++){ if(data[i]!=0) { str=str+data[i]; } } istringstream issInt(str); issInt >> a; cout<<a; return 0; }
赵4老师 2014-05-20
  • 打赏
  • 举报
回复
#include <stdio.h>
char s1[]="000423";
char s2[]="002334";
char s3[]="000000";
char s4[]="0000aa";
int i1,i2,i3;
char ss4[256];
int main() {
    sscanf(s1,"%d",&i1);
    printf("%d\n",i1);
    sscanf(s2,"%d",&i2);
    printf("%d\n",i2);
    sscanf(s3,"%d",&i3);
    printf("%d\n",i3);

    sscanf(s4,"%*[0-9]%s",ss4);
    printf("%s\n",ss4);
    return 0;
}
//423
//2334
//0
//aa
//
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
hanyue03 2014-05-20
  • 打赏
  • 举报
回复


#include <stdio.h>
#include <stdlib.h>


int main()
{
//char data[20]={'0','0','3','2','4','0','6','7','9','0','8','\0'};
char data[20]="00324067908";
int array [20]={0}; //可以用数组保存分割得到的整数
char *d1=data;
char *d2=NULL;


while (*d1 != '\0')
{

if (*d1 != '0')
{
char temp[20]={0};
int i =0;
while (*d1 !='0' && *d1 != '\0')
{
temp[i++]= *d1;
d1++;
}

printf("data = %s\n",temp);

}
d1++;
}

return 0;
}
「已注销」 2014-05-19
  • 打赏
  • 举报
回复
引用 10 楼 u012514171 的回复:
[quote=引用 9 楼 zhao4zhong1 的回复:] 费那事儿!
#include <stdio.h>
char s1[]="000423";
char s2[]="002334";
char s3[]="000000";
int i1,i2,i3;
int main() {
    sscanf(s1,"%d",&i1);
    printf("%d\n",i1);
    sscanf(s2,"%d",&i2);
    printf("%d\n",i2);
    sscanf(s3,"%d",&i3);
    printf("%d\n",i3);
    return 0;
}
//423
//2334
//0
//
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
用%d打印的时候不会出现前面的0,如果是还有其他字符则需要逐个字符的判断,3楼的可以参考[/quote] 是的,我就是想说,如果字符串是“00002200200aa”之类的,就不能用上面的做法了,所以还是要操作字符, 所以,能不能给个具体的例子呢?真的没有基础啊
「已注销」 2014-05-19
  • 打赏
  • 举报
回复
引用
用%d打印的时候不会出现前面的0,如果是还有其他字符则需要逐个字符的判断,3楼的可以参考
是的,我就是想说,如果字符串是“00002200200aa”之类的,就不能用上面的做法了,所以还是要操作字符, 所以,能不能给个具体的例子呢?真的没有基础啊
lanlvy 2014-05-19
  • 打赏
  • 举报
回复
引用 9 楼 zhao4zhong1 的回复:
费那事儿!
#include <stdio.h>
char s1[]="000423";
char s2[]="002334";
char s3[]="000000";
int i1,i2,i3;
int main() {
    sscanf(s1,"%d",&i1);
    printf("%d\n",i1);
    sscanf(s2,"%d",&i2);
    printf("%d\n",i2);
    sscanf(s3,"%d",&i3);
    printf("%d\n",i3);
    return 0;
}
//423
//2334
//0
//
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
用%d打印的时候不会出现前面的0,如果是还有其他字符则需要逐个字符的判断,3楼的可以参考
赵4老师 2014-05-19
  • 打赏
  • 举报
回复
费那事儿!
#include <stdio.h>
char s1[]="000423";
char s2[]="002334";
char s3[]="000000";
int i1,i2,i3;
int main() {
    sscanf(s1,"%d",&i1);
    printf("%d\n",i1);
    sscanf(s2,"%d",&i2);
    printf("%d\n",i2);
    sscanf(s3,"%d",&i3);
    printf("%d\n",i3);
    return 0;
}
//423
//2334
//0
//
作为一个C程序员,对 scanf,sscanf,fscanf printf,sprintf,fprintf 这类函数的用法,还是要做到“拳不离手,曲不离口”的。
「已注销」 2014-05-19
  • 打赏
  • 举报
回复
引用 5 楼 zyaiwx 的回复:

int i = 0;
for(; i < recvLength; i ++) {
    if(data[i] > '0')
        ....
}
你的代码是c的
上面的例子跑不通,能不能给个完整的例子呢?
Aist-memory 2014-05-19
  • 打赏
  • 举报
回复
参数是 const char*
zybjtu 2014-05-19
  • 打赏
  • 举报
回复
引用 4 楼 disalong 的回复:
[quote=引用 3 楼 u010039337 的回复:] string str=null; for(int i=0;i<recevlength;i++){ if(data[i]!=0) { str=str+data[i]; } } int num=atoi(str);
为什么我引入了stdlib.h头文件还是编译不过去呢? [/quote] 因为你传入的是string。 但是atoi接受char*
zybjtu 2014-05-19
  • 打赏
  • 举报
回复

int i = 0;
for(; i < recvLength; i ++) {
    if(data[i] > '0')
        ....
}
你的代码是c的
「已注销」 2014-05-19
  • 打赏
  • 举报
回复
引用 3 楼 u010039337 的回复:
string str=null;
for(int i=0;i<recevlength;i++){

if(data[i]!=0)
{
str=str+data[i];

}
}
int num=atoi(str);


为什么我引入了stdlib.h头文件还是编译不过去呢?

原点丹枫 2014-05-19
  • 打赏
  • 举报
回复
string str=null; for(int i=0;i<recevlength;i++){ if(data[i]!=0) { str=str+data[i]; } } int num=atoi(str);
「已注销」 2014-05-19
  • 打赏
  • 举报
回复
char数组转C++里边的string对象,string有很多的操作函数,对于你要求的处理非常方便, 参考:http://msdn.microsoft.com/en-us/library/syxtdd4f.aspx http://blog.csdn.net/lanyzh0909/article/details/6957649
Saleayas 2014-05-19
  • 打赏
  • 举报
回复
atoi

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧