gpt4 book ai didi

c - 从 STDIN 读取一行以仅使用 C 提取数字标记

转载 作者:行者123 更新时间:2023-12-04 09:15:09 26 4
gpt4 key购买 nike

问题陈述:

需要处理从 STDIN 接受的输入字符串。并仅查找字符串中存在的所有数字标记。将标记视为由空格分隔的可打印字符序列。 (在数字标记中,所有字符都是数字)

您需要构建一个新字符串,其格式为 numeric_token1 numeric_token2 按升序打印。 (一个空格是分隔符)(如果没有找到数字标记,则需要打印 NONE FOUND)

输入:我们需要从 STDIN 读取一行以仅提取数字标记

输出:由 number1 number2 升序组成的字符串。或者没有找到

测试用例:

Input: hello hi 123  789 45 hi
Output: 45 123 789

Input: 20 abc beg 90 67
Output: 20 67 90

Input: hi hello foo bar foo
Output: NONE FOUND

我尝试了以下方式,使用静态方式,以升序对它们进行标记化和重新排列,但不够幸运。我是这些 token 的新手,非常感谢任何帮助。

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

char* RemoveCharac(char* input)
{
char* dest = input;
char* src = input;

while(*src)
{
if (isalpha(*src))
{
src++;
continue;
}

*dest++ = *src++;
}

*dest = '\0';
return input;
}

int main(void)
{
char inText[] = "hello hi 123 789 45 hi";
char *pch;
char* strArray[1024];
char* ResText = RemoveCharac(inText);

int i = 0,j;
printf("The result is %s\n", ResText);
pch = strtok (ResText," ,.-");
while (pch != NULL)
{
strArray[i] = malloc(strlen(pch) + 1);
strcpy(strArray[i], pch);
printf ("%s ",pch);
pch = strtok (NULL, " ,.-");
i++;
}

printf ("\n");
for(j=0;j<i;j++)
{
printf("\t %s",strArray[i]);
}

return 0;
}

最佳答案

使用fgets()读取字符串,strtok()将其拆分为 token ,isdigit()检查 token 是否为数字,atoi()将字符串转换为数字,qsort()对字符串进行排序。

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

int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

int main(void) {
char input[100];
int tokens[20], counter = 0;
fgets(input, sizeof(input), stdin);
input[strcspn(input, "\n")] = 0;

char * pch = strtok (input," ");
while (pch != NULL)
{
int isNumber = 1;
//printf ("%s\n", pch);
for (size_t i = 0; i < strlen(pch); ++i)
if (!isdigit(pch[i]))
isNumber = 0;
if(isNumber)
tokens[counter++] = atoi(pch);
pch = strtok (NULL, " ");
}
qsort (tokens, counter, sizeof(int), compare);
for(int i = 0; i < counter; ++i)
printf("%d ", tokens[i]);
if(!counter)
printf("NONE FOUND");
printf("\n");
return 0;
}

关于c - 从 STDIN 读取一行以仅使用 C 提取数字标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46499205/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com