请教:将字符“3 5 13-18”数字转换为3 5 13 14 15 16 17 18数字

csnpx 2019-01-15 11:21:14
请教:C语言怎么将字符“3 5 13-18”数字转换为3 5 13 14 15 16 17 18数字,“13-18”弄不好
...全文
396 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
csnpx 2019-01-17
  • 打赏
  • 举报
回复
atoi函数能直接将“-”前后数字进行链接?
  • 打赏
  • 举报
回复
atoi函数了解一下
csnpx 2019-01-16
  • 打赏
  • 举报
回复
int strintSzA(char *str,int j,int g)
{
int* ans=(int*)malloc(sizeof(int)*100);
char c;
int stri=0,ansi=0,num=0;
for(;;)
{
c=str[stri++];
if(c>='0' && c<='9') num*=10,num+=c-'0';
else if(c=='-')
{
char tempc;
int tempnum=0;
for(;;)
{
tempc=str[stri++];
if(tempc==' ') break;
else if(tempc>='0' && tempc<='9') tempnum*=10,tempnum+=tempc-'0';
else break;
}
int tempi=num;
for(num=0;tempi<=tempnum;++tempi) ans[ansi++]=tempi;
}
else if(c=='\0') break;
else ans[ansi++]=num,num=0;
}
//int_array return_ans={ans,ansi-1};return return_ans;
if(g==0)
return ans[j];
else
return ansi;

}

#include "stdafx.h" 
using namespace std;

int main()
{
char *str="3 5 13-18";
int i,sz;
for(i=0;i<strintSzA(str,1,1);i++)
{
sz=strintSzA(str,i,0);
cout<<" "<<sz;
}
cout<<"\n";
cout<<"共有数字"<<strintSzA(str,1,1)<<"个"<<"\n";
return 0;
}



再次谢谢“_ZGq”老师!!!

csnpx 2019-01-16
  • 打赏
  • 举报
回复
引用 13 楼 _ZGq 的回复:
结构体那部分(3~6行)打错了:

typedef struct{
int* array;
int size;
}int_array;


能写成不是结构体的吗?还不会弄结构体函数! 写成一般的函数获取整型数组和它的大小
int intSzA(char *st,int j,int g)
{
int num[99];
.........
..........
if(g==0)
{
return num[j];
}
else
{
return 数组有效数字个数;
}
}


谢谢老师了!
_ZGq 2019-01-16
  • 打赏
  • 举报
回复
结构体那部分(3~6行)打错了:

typedef struct{
int* array;
int size;
}int_array;
_ZGq 2019-01-16
  • 打赏
  • 举报
回复
引用 11 楼 csnpx 的回复:
[quote=引用 2 楼 _ZGq 的回复:]
%d getchar() %d getchar() %d getchar() %d......%d getchar() %d
如果getchar的结果是空格,就还是空格;
如果getchar的结果是'-',就展开。

将字符串“3 5 13-18”作为函数的参数引入函数转换出的数字存入数组中,如何改动?还请你再次操刀,谢谢!
int strint(char *st,int j)
{
int num[99];
.........
..........
return num[j];
}*/[/quote]

#include<stdio.h>
#include<malloc.h>
struct int_array{
int* array;
int size;
};
int_array strint(char str[]){
int* ans=(int*)malloc(sizeof(int)*100);
char c;
int stri=0,ansi=0,num=0;
for(;;){
c=str[stri++];
if(c>='0' && c<='9') num*=10,num+=c-'0';
else if(c=='-'){
char tempc;
int tempnum=0;
for(;;){
tempc=str[stri++];
if(tempc==' ') break;
else if(tempc>='0' && tempc<='9') tempnum*=10,tempnum+=tempc-'0';
else break;
}
int tempi=num;
for(num=0;tempi<=tempnum;++tempi) ans[ansi++]=tempi;
}
else if(c=='\0') break;
else ans[ansi++]=num,num=0;
}
int_array return_ans={ans,ansi-1};
return return_ans;
}

最后返回的是一个结构体,表示一个整型数组和它的大小。
lin5161678 2019-01-15
  • 打赏
  • 举报
回复
全部%d
正数保持原样
负数 做展开
从前一个数字+1开始 到当前数字的绝对值
_ZGq 2019-01-15
  • 打赏
  • 举报
回复
%d getchar() %d getchar() %d getchar() %d......%d getchar() %d
如果getchar的结果是空格,就还是空格;
如果getchar的结果是'-',就展开。
ForgetTomorrow 2019-01-15
  • 打赏
  • 举报
回复
atoi就可以了
csnpx 2019-01-15
  • 打赏
  • 举报
回复
引用 2 楼 _ZGq 的回复:
%d getchar() %d getchar() %d getchar() %d......%d getchar() %d
如果getchar的结果是空格,就还是空格;
如果getchar的结果是'-',就展开。

将字符串“3 5 13-18”作为函数的参数引入函数转换出的数字存入数组中,如何改动?还请你再次操刀,谢谢!
int strint(char *st,int j)
{
int num[99];
.........
..........
return num[j];
}*/
csnpx 2019-01-15
  • 打赏
  • 举报
回复

将字符“3 5 13-18”数字转换为3 5 13 14 15 16 17 18数字;
“13-18”这是代表是13到18的连续数字13 14 15 16 17 18

请老师们帮忙写出完整代码学习,先谢谢了!

#include<stdio.h>
int main(){
for(;;){
int a;
char c;
scanf("%d",&a);
c=getchar();
if(c==' ') printf("%d ",a);
else if(c=='-'){
int b;
scanf("%d",&b);
int i=a;
for(;i<=b;++i) printf("%d ",i);
char tempc=getchar();
if(tempc==' ') continue;
else break;
}
else break;
}
return 0;
}
[/quote]

谢谢“_ZGq”老师!!!
csnpx 2019-01-15
  • 打赏
  • 举报
回复


谢谢七楼的“_ZGq”老师!!!
_ZGq 2019-01-15
  • 打赏
  • 举报
回复
引用 7 楼 csnpx 的回复:
将字符“3 5 13-18”数字转换为3 5 13 14 15 16 17 18数字;
“13-18”这是代表是13到18的连续数字13 14 15 16 17 18

请老师们帮忙写出完整代码学习,先谢谢了!


#include<stdio.h>
int main(){
for(;;){
int a;
char c;
scanf("%d",&a);
c=getchar();
if(c==' ') printf("%d ",a);
else if(c=='-'){
int b;
scanf("%d",&b);
int i=a;
for(;i<=b;++i) printf("%d ",i);
char tempc=getchar();
if(tempc==' ') continue;
else break;
}
else break;
}
return 0;
}
csnpx 2019-01-15
  • 打赏
  • 举报
回复
将字符“3 5 13-18”数字转换为3 5 13 14 15 16 17 18数字;
“13-18”这是代表是13到18的连续数字13 14 15 16 17 18

请老师们帮忙写出完整代码学习,先谢谢了!
CT8100 2019-01-15
  • 打赏
  • 举报
回复
#define f(x)-f(y) F(x,y)
倚栏|听风 2019-01-15
  • 打赏
  • 举报
回复
引用 3 楼 lin5161678 的回复:
全部%d 正数保持原样 负数 做展开 从前一个数字+1开始 到当前数字的绝对值
你这思路有点意思,独辟蹊径 要是我肯定是找"-"
csnpx 2019-01-15
  • 打赏
  • 举报
回复
“13-18”这是代表是13到18的连续数字13 14 15 16 17 18

64,654

社区成员

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

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