C语言关于字符运算和字符串转换问题,在线等

hkbyest 2007-06-27 12:50:14
定义了一个字符数组,用gets()输入一个字符串,然后我需要对字符数组里的每个字符进行一些加减运算,并把结果十六进制值转换成字符输出,请问该怎么写好。

另:其中一个字符的ASCII值经过减运算后变成了负数,结果的十六进制表示为FFFFF0A8,请问我该怎么在循环里处理这个转换,希望给出相关代码,谢谢~
...全文
248 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
自己顶一下。我的代码如下,不过运行出错:

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

main()
{

char f[20];
char s[20];
int count=0,m=0,n=0;
int b=0;
unsigned long a=0;
printf("请输入字符串:");
gets(f);
count=strlen(f);
while(count)
{
n=m+1;
if(m=3)
{
a=f[m]+n-0x7D6-0x7D6;
ultoa(a,s,16);
printf("%s",a);
}
else
{
b=f[m]+n;
itoa(b,s,16);
printf("%s",b);
}
m++;
count--;
}

}


编译时提示没有ultoa定义,改成itoa倒是编译通过。
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
已经给了,呵呵,多谢liqiang123abc() 兄弟的热心帮助。
这段程序是关于一点算法分析的,不是书本题目。
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
谢了哦
祝你学习进步
事业有成
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
挖 
给了我95分啊
真是受之有愧啊
没有给你彻底解决问题
只是帮了你一下
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
哦 呵呵
也给偶点分啊
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
自己解决了,N年没用C了,基础知识不过关。

代码如下:

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

main()
{

char f[20];
char s[20];
int count=0,m=0,n=0,b=0;
unsigned long int a=0;
printf("请输入字符串:");
gets(f);
count=strlen(f);
printf("\n转换字符串为:");
while(count)
{
n=m+1;
if(m==3)
{
a=f[m]+n-0x7D6-0x7D6;
printf("%X",a);
}
else
{
b=f[m]+n;
printf("%X",b);
}
m++;
count--;
}
printf("\n\n");
}

结帖给分。
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
你这是老师给的题目吗

你不说出来题目的内容
谁也不知道你的算法对不对
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
估计是C-FREE 3.52编译器的库函数里没有ultoa

看看ultoa的定义

函数名: ultoa
功 能: 转换一个无符号长整型数为字符串
用 法: char *ultoa(unsigned long value, char *string, int radix);
程序例:

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

int main( void )
{
unsigned long lnumber = 3123456789L;
char string[25];

ultoa(lnumber,string,10);
printf("string = %s unsigned long = %lu\n",string,lnumber);

return 0;
}


hkbyest 2007-06-27
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

上面那两个我都定义了啊。
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
ultoa未定义
是缺少头文件
#include <stdlib.h>
#include <stdio.h>

liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
加上
#include <stdlib.h>
#include <stdio.h>

liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
少了头文件
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
另外输出也不对,关于输出问题我用printf("%X",b)解决了,

还剩“第4个字符的ASCII值经过减运算后变成了负数,结果的十六进制表示为FFFFF0A8,请问我该怎么定义a,怎么处理输出”这问题。
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
楼上的兄弟,我用的C-FREE 3.52编译提示ultoa未定义啊
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
printf("%s",b);
肯定出错的
应该是printf("%c",b);
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
这样行不
liqiang123abc 2007-06-27
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>

main()
{

char f[20];
char s[20];
int count=0,m=0,n=0;
int b=0;
unsigned long a=0;

printf("请输入字符串:");
gets(f);
count=strlen(f);

while(count!=0)
{
n=m+1;
if(m=3)
{
a=f[m]+n-0x7D6-0x7D6;
ultoa(a,s,16);
printf("%c",a);
}
else
{
b=f[m]+n;
itoa(b,s,16);
printf("%c",b);
}
m++;
count--;
}

}
ayw215 2007-06-27
  • 打赏
  • 举报
回复
输出的时候安照 unsigned char,超过范围的,自动回卷
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
XX的,SB了。根本不用转换,用个printf("%X",b)就OK了。

剩下“其中一个字符的ASCII值经过减运算后变成了负数,结果的十六进制表示为FFFFF0A8,请问我该怎么在循环里处理这个转换”问题。

等待回答。
hkbyest 2007-06-27
  • 打赏
  • 举报
回复
哦,上面的 printf("%s",a); printf("%s",b);错了
改成 printf("%s",s); printf("%s",s);

现在运行正常了,不过输出结果不对。


69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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