gpt4 book ai didi

c - 试图在一个字符之后复制字符串的其余部分

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:51 26 4
gpt4 key购买 nike

我正在尝试复制用户输入字符串的其余部分。它始终在以下位置输入:机场、00:00、00:00。这些数字是飞行时间和停留时间。在我的代码中,我已经让它吐出机场,但试图使用 strchr 查找第一个“,”之后的所有内容是一种痛苦。有没有办法可以删除机场并将其余部分放入新字符串并继续使用 strchr?我必须重新格式化以逗号分隔的字符串是目标。最终结果应该是“城市有飞行时间 tt.tt 小时和停留时间 tt.tt 小时”。我不能使用 scanf 等,所以看起来 strchr 和 strcopy 可能是我唯一的选择。任何帮助表示赞赏。

我目前在尝试查找字符串中最后一个“,”之后的字符时出错。

赋值规则:不要使用 strtok()、任何与 scanf 相关的函数、任何对字符串数据进行标记化的函数。

int main()
{
int counter = 0;
int flightTimeNum = 0;
char userInput[81] ="";
char userInputNew[81] = "";
char cityNew[20] = "";
char flightTime[20] = "";
char layOverTime[20] = "";


fgets(userInput, 81, stdin);
char *city;
char *flight;
char *layover;

city = strchr(userInput, ',');
strncpy(cityNew, userInput, city - userInput);
printf("%s\n" ,cityNew);

layover = strrchr(userInput, ',');
strncpy(layOverTime, userInput, layover - userInput);
printf("%s\n", layOverTime);

printf("Press ENTER key to Continue\n");
getchar();

}

最佳答案

如果您想使用 strchr,您可以考虑通过将每个 ',' 替换为空终止符 \0 来创建子字符串,然后设置指向每个子字符串的指针关于前一个字符串的长度。

或者,您可以通过字符串累积字符直到到达 , 然后终止缓冲区并开始将字符串的下一部分累积到下一个缓冲区中,并重复直到到达userInput 的空终止符。

第一种方法的示例,请注意,您应该验证您是否能够创建预期数量的子字符串等,以防用户输入无效数据。

// NULL terminate each substring
char *p = userInput; // Point to the beginning of the string
for(;;) {
p = strchr(p, ','); // Find first ',' starting from 'p'
if (!p) break; // If not found break out of loop
*p = '\0'; // otherwise replace ',' with a null terminator
++p; // move pointer 'p' to the next character
}

// Setup pointers to each substring
city = userInput;
flight = city + strlen(city) + 1;
layover = flight + strlen(flight) + 1;

关于c - 试图在一个字符之后复制字符串的其余部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55426611/

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