注册 登录
编程论坛 C语言论坛

截取字符问题,求指教。

祁建邵 发布于 2020-10-21 20:53, 2731 次点击
小孟很聪明,但是很偷懒。他打数字从来不用空格,因此相邻的几个数都会连在一起。
比如,小孟想打三个数123 98 -8921,他会打成12398-8921。
今天,小孟妈妈让他记几组整数,可是小孟打下来的数字又连在一起了。
不过小孟记得每组数据都有三个数,前两个数字都是正数,其中第一个数字有3位,第二个数字有2位,
第三个数字是负数,连同负号一共有5位。

你能帮帮小孟么?
上面是题目,我真的不会了。老师说要字符串变成整数,大佬么救救我。
12 回复
#2
风过无痕19892020-10-21 21:20
回复 楼主 祁建邵
先给你一个思路:将那一组全部置于一个字符数组
然后,用循环语句截取,或者直接用字符截取函数 strncpy() 其头函数是 string.h 也可以,你哪个离就用哪个
转为数字也有函数可用,atoi():就是将字符串转换为整型值,int atoi(char,str[ ])一条语句就搞定
我直接给你程序不利于你学习提高,你先自己写程序。若不行的话,晚些时候,我再给你一个程序

[此贴子已经被作者于2020-10-21 21:29编辑过]

#3
祁建邵2020-10-21 22:14
回复 2楼 风过无痕1989
好的哥,我去试试。知道的还是太少了,唉。
#4
rjsp2020-10-21 22:41
上面是题目
这就是题目啦,怎么连输入输出的说明都没有?

程序代码:

#include <stdio.h>

int main( void )
{
    for( int a,b,c; scanf("%3d%2d%5d",&a,&b,&c)==3; )
        printf( "%d %d %d\n", a, b, c );
}
#5
祁建邵2020-10-21 22:48
输入;12345-1234
输出;123 45 -1234
#6
祁建邵2020-10-21 22:50
回复 4楼 rjsp
输入;12345-1234
输出;123 45 -1234
#7
rjsp2020-10-21 23:44
以下是引用祁建邵在2020-10-21 22:50:26的发言:

输入;12345-1234
输出;123 45 -1234

只要一组数据的话,那将我给你的代码中的for()删除掉
#8
rjsp2020-10-21 23:45
不对呀,你给的题目明明说
小孟妈妈让他记几组整数
#9
祁建邵2020-10-22 00:43
回复 8楼 rjsp
哥,他计数不加空格。所以就记成一串数字了。然后让写编程还
#10
风过无痕19892020-10-22 01:05
回复 楼主 祁建邵
程序代码:

// 将12398-8921截取为三组数,第一个数字3位,第二个数字2位,第三个数字是负数,连同负号一共有5位。

#include<stdio.h>
#include <stdlib.h>
int main(void)
{
    int i,num1,num2,num3;
    char str1[4] = {' '};   // 声明时多一个,存放结束符,避免出乱码(下同),因为利用循环切割字符时,并不会自动加结束符。
    char str2[3] = {' '};
    char str3[6] = {' '};
/*    char str[10] = "12398-8921";   */
    char str[10] = {' '};   // 此语句及下面的循环输入,与上一条被注释掉的语句可互相替换
    for(i = 0;i < 10;i++)
    {
        scanf("%c",&str[i]);
    }

    for(i = 0;i < 3;i++)    // 截取第1组字符
    {
        str1[i] = str[i];
        str1[4] = '\0';
    }
    for(i = 3;i < 5;i++)    // 截取第2组字符
    {
        str2[i - 3] = str[i];
        str2[3] = '\0';
    }
    for(i = 5;i < 10;i++)    // 截取第3组字符
    {
        str3[i - 5] = str[i];
        str3[6] = '\0';
    }
    num1 = atoi(str1);       // 将字符转换为数字
    num2 = atoi(str2);
    num3 = atoi(str3);

    printf("第一个数字是:%d \n",num1);
    printf("第二个数字是:%d \n",num2);
    printf("第三个数字是:%d \n",num3);
}
#11
风过无痕19892020-10-22 09:11
若要求输出为一排的话,最后三句改为一句即可:
printf("%d %d %d\n",num1,num2num3);

技术拓展:C/C++语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)。

atof():将字符串转换为双精度浮点型值。
atoi():将字符串转换为整型值。
atol():将字符串转换为长整型值。
strtod():将字符串转换为双精度浮点型值,并报告不能被转换的所有剩余数字。
strtol():将字符串转换为长整值,并报告不能被转换的所有剩余数字。
strtoul():将字符串转换为无符号长整型值,并报告不能被转换的所有剩余数字。
#12
祁建邵2020-10-22 11:39
回复 10楼 风过无痕1989
哥,我想问,啥时候可以不用&这个符号啊。好像定义数数组,输入的时候不用??
#13
风过无痕19892020-10-22 15:10
回复 12楼 祁建邵
scanf()读取一组数字、一串字符串的时候不用加,读取单个数字、单个字符的时候,都要加&
1