标题:求助简单编程(输入的整数按字符串形式逆序输出)
只看楼主
ftyuijnms
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2020-9-13
结帖率:100%
 问题点数:0 回复次数:8 
求助简单编程(输入的整数按字符串形式逆序输出)
老师留的作业,实在没好好学习,一点头绪也没有,可以帮忙生产一份答案吗?跪求.!

编写函数实现将一个正整数转换为与其各位数字逆序的字符串,函数原型为:void IntNumtoStr(int Num,   Char *s)。编写主函数实现如下功能:从键盘输入5个小于10000的正整数,调用IntNumtoStr函数将这5个整数转换成字符串,并将整数及其对应字符串输出到屏幕,分5行输出。(提示:假设a为数值0~9中的任意数字,将其转换为字符的方法是:’0’+a)
搜索更多相关主题的帖子: 逆序 字符串 输出 整数 输入 
2022-06-16 12:41
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
是这样吗?
程序代码:
#include <iostream>
using namespace std;
/*
void IntNumtoStr(int Num,   char *s){
    *s=(char)Num;
    //s='0'+Num;
}*/ //输入的就是字符串形式。
int main(){
    char* n[5][5];//前面[5]表示五个数字,后面[5]表示每个字符串五字节。
    //n字符串最多四位数,加上NUL字符则是五字节。
    int n_i[5];//存放五个数的数组(整数形式)
    int i=0;//循环计数变量
    cout<<"请输入五个数字"<<endl;
    cin>>*n[0]>>*n[1]>>*n[2]>>*n[3]>>*n[4];
    for(;i<5;i++) n_i[i]=(int)*n[i];//转换为整数
    for(i=4;i>=0;i--)
    {
        cout<<n_i[i]<<","<<*n[i]<<endl;
    }
    return 0;
}


[此贴子已经被作者于2022-7-10 21:48编辑过]


爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-07-10 21:15
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
仅供参考,自己改改

程序代码:
#include <iostream>

void int_to_string( unsigned val, char* s )
{
    if( val == 0 )
        *s++ = '0';
    else
    {  
        for( ; val!=0; val/=10 )
            *s++ = val%10 + '0';
    }
    *s = '\0';
}

int main( void )
{
    using namespace std;

    for( size_t i=0; i!=5; ++i )
    {
        unsigned val;
        cin >> val;

        char s[21];
        int_to_string( val, s );

        cout << val << ' ' << s << endl;
    }
}
2022-07-10 21:43
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
回复 3楼 rjsp

    [*](int_to_string那里)
    [*]*s++ = /*省略……*/
    [*]for( ; val!=0; val/=10 ) /*这里有换行*/ *s++ = val%10 + '0';
    [*]*s = '\0';//(最后的)问:不是会变“空白”吗?

分别是什么意思?

[此贴子已经被作者于2022-7-10 22:06编辑过]


爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-07-10 22:03
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:0 
以下是引用chenyucheng在2022-7-10 22:03:16的发言:


[*](int_to_string那里)
[*]*s++ = /*省略……*/
[*]for( ; val!=0; val/=10 ) /*这里有换行*/ *s++ = val%10 + '0';
[*]*s = '\0';//(最后的)问:不是会变“空白”吗?

分别是什么意思?
似乎,你对C/C++一点儿也不懂呀

以输入 123 为例:
123 是0吗?不是0,那获取其个位(即 123%10==3),然后将 3 转化成 '3'(即 3+'0'=='3'),将'3'保存到s指向的存储空间(即 *s='3'),s指向下一个位置(即 s++),123去掉其个位变为12(即 123/10==12);
12 是0吗?不是0,那获取其个位(即 12%10==2),然后将 2 转化成 '2'(即 2+'0'=='2'),将'2'保存到s指向的存储空间(即 *s='2'),s指向下一个位置(即 s++),12去掉其个位变为1(即 12/10==1);
1 是0吗?不是0,那获取其个位(即 1%10==1),然后将 1 转化成 '1'(即 1+'0'=='1'),将'1'保存到s指向的存储空间(即 *s='1'),s指向下一个位置(即 s++),1去掉其个位变为0(即 1/10==0);
0 是0吗?是0,那循环终止。

字符串是以'\0'这个标志结尾的,所以最后还要在 '3'、'2'、'1' 后面补个 '\0'
2022-07-11 09:52
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
以下是引用rjsp在2022-7-11 09:52:26的发言:

似乎,你对C/C++一点儿也不懂呀

以输入 123 为例:
123 是0吗?不是0,那获取其个位(即 123%10==3),然后将 3 转化成 '3'(即 3+'0'=='3'),将'3'保存到s指向的存储空间(即 *s='3'),s指向下一个位置(即 s++),123去掉其个位变为12(即 123/10==12);
12 是0吗?不是0,那获取其个位(即 12%10==2),然后将 2 转化成 '2'(即 2+'0'=='2'),将'2'保存到s指向的存储空间(即 *s='2'),s指向下一个位置(即 s++),12去掉其个位变为1(即 12/10==1);
1 是0吗?不是0,那获取其个位(即 1%10==1),然后将 1 转化成 '1'(即 1+'0'=='1'),将'1'保存到s指向的存储空间(即 *s='1'),s指向下一个位置(即 s++),1去掉其个位变为0(即 1/10==0);
0 是0吗?是0,那循环终止。

字符串是以'\0'这个标志结尾的,所以最后还要在 '3'、'2'、'1' 后面补个 '\0'

我是用我已学的基本知识来的。
1. 一般++运算符只能用在数值类型上的,我第一次学到++运算符还能在字符型用的。
2. 如果按照你的方法“*s='2'”、“*s='1'”等的意思分别是“将‘2’赋值给*s”、“将‘1’赋值给*s”,但*s是数组,这样可能报错,也可能转换成{'2','\0','\0',……}的样子。但刚才两种说法都错,因为你说字符型数组用++会指向下一个位置,赋值的是到当前位置的。既然如此,那为什么“*s=3”明明中间是等于号,表示“赋值给*s”,没指定下标,却不把整个数组赋了,等号的意义也就变了啊!(等号本是绝对等于)
3. 明明比如“2+'0'”结果是字符串"20"啊(整数隐式转换成字符),为什么“2+'0'==2”呢?
4. 明明直接一个“(char)num”就行了啊,为什么要这么繁琐的操作?

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-07-12 12:22
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 6楼 chenyucheng
这个需要你学习一下ASCII知识
首先,你说的++用于字符串  这个说法是不对的   在c语言中 单引号 表示单个字符  和短整型相通(从某种意义上和int 相通)
其次  2是一个int 要把它变成字符  有很多种办法+'0' 就是其中一种   因为字符2 的ascii码值是50  '0'的码值是48  所以阿拉伯数字都可以通过+'0' 来实现int-->char的转化

DO IT YOURSELF !
2022-07-12 13:39
chenyucheng
Rank: 3Rank: 3
来 自:浙江省台州市临海市
等 级:论坛游侠
威 望:3
帖 子:141
专家分:181
注 册:2022-7-1
得分:0 
回复 7楼 wp231957
那为什么++可以用来指向下一个位置?
还有我学会了一个“C语言反人类设计”:'#'+'1'=='T'(自己编的,意思是"#"的ASCII码35[十进制]和"1"的ASCII码49[十进制]加起来是'T'的ASCII——84),相当于其他编程语言的chr(ord("#")+ord("1"))或chr(asc("#")+asc("1"))

爱玩编程的小学生,有Python,但只会一点点C++。

版主->斑竹->竹子,所以版主是竹子。(doge)
//不要让我当版主
2022-07-12 18:08
wp231957
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:神界
等 级:版主
威 望:422
帖 子:13681
专家分:53296
注 册:2012-10-18
得分:0 
回复 8楼 chenyucheng
char b='#'+'1';  这个语句当然没问题  也谈不上什么反人类

不过你说的++  我也不太明白你哪里不明白    那不是指针吗   当然可以++ -- 了

DO IT YOURSELF !
2022-07-13 08:40



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-509356-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016411 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved