我正在编写一个程序,要求用户输入两个单词,用逗号分隔。我还必须编写一个函数来查找字符串中的第二个单词,并将该单词复制到一个新的内存位置(不带逗号)。该函数应返回指向新内存位置的指针。然后Main应打印原始输入字符串和第二个单词。
到目前为止,这是我的代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
char*secondWordFinder(char *userInput)
int main ()
{
char*userInput;
char*result;
userInput=malloc(sizeof(char)*101);
printf("Please Enter Two Words Separated by a comma\n");
fgets(userInput,101, stdin);
printf("%s",userInput);
result=secondWordFinder(userInput);
printf("%s",result);
free(userInput);
return 0;
}
char*secondWordFinder(char *userInput)
{
char*userEntry;
char*ptr;
int i;
i=0;
for(i=0; i<strlen(userInput);i++)
{
userEntry=strtok(userInput, ",");
userEntry=strtok(NULL,",");
pointer=strcpy(ptr,userEntry);
}
return ptr;
}
我没有在这里得到一个实际输出代码我做错了什么???
答案 0 :(得分:0)
提取第二个令牌时,您说它必须后面跟一个逗号。
userEntry = strtok(NULL, ",");
但实际上后面是换行符。试试这个:
userEntry = strtok(NULL, ",\n");
如果第二个单词是最后一个单词,则会有效,如果后面跟着另外的逗号分隔单词,则会有效。
是的,你可以扔掉循环。
答案 1 :(得分:0)
几个问题:
for(i=0; i<strlen(userInput);i++)
{
userEntry=strtok(userInput, ",");
userEntry=strtok(NULL,",");
pointer=strcpy(ptr,userEntry);
}
ptr
指向任何有意义的位置,因此您尝试将userEntry
复制到一些随机内存块中; strtok
后,userEntry
已经指向第二个字符串 - 您只需返回userEntry
您应该可以将其重写为
strtok(userInput, ", "); // accounts for any spaces between the comma and next string
userEntry = strtok( NULL, ", ");
return userEntry;
您可能希望在返回之前从第二个单词(如果存在)中删除尾随换行符;一种方法是
char *newline = strchr( userEntry, '\n' );
if ( newline )
*newline = 0;
修改强>
如果要求你必须将第二个单词复制到secondWordFinder
中的新缓冲区并将指针返回到新缓冲区,那么你必须按照
ptr = malloc( strlen( userEntry ) + 1 );
if ( ptr )
strcpy( ptr, userEntry );
return ptr;