输入的时候可以用gets(str);来存放输入的内容,遇到回车结束。这样会读入整行字符串。然后再处理字符串就能够分出数字对应的字符串了,最后利用函数atoi将数字字符串转换成数字就可以了。
使用strtok函数分隔字符串。
char *strtok(char s[], const char *delim);
strtok()用来将字符串分割成一个个片段。参数s指向欲分割的字符串,参数delim则为分割字符串中包含的所有字符。当strtok()在参数s的字符串中发现参数delim中包含的分割字符时,则会将该字符改为\0 字符。在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL。每次调用成功则返回指向被分割出片段的指针。
分隔出字符串的数量就是整数的数量,对于每个分隔的字符串,使用atoi进行转化即可。
可是他一行有两个数我怎么分辨?分辨了又如何存入数组?
追答#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<stdlib.h>
int main()
{
char str[100];
int n[100];//用来存放一行中输入的数字
while(gets(str))
{
int len=strlen(str),pos=0;
char c=' ';
//用来存放当前字符的前一个字符,这样如果从空格变到数字表示开始了一个数字,
//如果从数字变成了空格表示一个数字结束。然后可以利用atoi函数将找到的数字
//字符串变成对应的整型,存在n数组中。程序输入ctrl+z结束,
//这是由while循环中的gets(str)决定
char decimal[100];
int cnt;
for(int i=0;i<len;i++)
{
if(str[i]!=' ')
{
if(c==' ')//表示是一个数字的开始
{
cnt=0;
decimal[cnt]=str[i];
cnt++;
}
else//表示
{
decimal[cnt]=str[i];
cnt++;
}
c=str[i];
}
else//表示当前的是空格,如果它的前一个字符是数字的话,表示一个数字找出了
{
if(c!=' ')
{
decimal[cnt]='\0';
n[pos]=atoi(decimal);
pos++;
}
c=str[i];
}
}
if(c!=' ')//这是字符串最后是一个数字而不是空格的情况
{
decimal[cnt]='\0';
n[pos]=atoi(decimal);
pos++;
}
for(int i=0;i<pos;i++)
printf("%d ",n[i]);
printf("\n");
}
getch();
return 0;
}
奇数行是输入的串,偶数行是对应的数字。
//程序看不懂的话,就自己写一个例子,然后在纸上一个一个地走一遍就懂了。