我有一个argv c程序,它把单词颠倒过来,看它是不是回文。我只想清理输出,让它打印原始输入而不是反向输入,但由于它是argv,我似乎不知道如何做到这一点。
int main(int argc, char* argv[])
{
char *string = (char*)malloc(1000);
string[0] = '\0';
for(i = 1; i < argc; i++)
strcat(string, argv[i]);
for(j = 0; string[ j ]; j++)
string[j] = tolower(string[ j ]);
reverse(string);
printf("Reverse of entered word is \"%s\".\n", string);
result = is_palindrome(string);
if ( result == 1)
printf("\"%s\" is a palindrome.\n", string);
else
printf("\"%s\" is not a palindrome.\n", string);
system("pause");
}我省略了其余的函数,但您可以在主要的printf中看到它是不是回文类型。不确定如何使其等于原始输入,并知道参数的数量。目前,它打印反转的字符串,而我认为打印原始字符串会更好。我想我把它弄得太难了,但我不确定。
发布于 2015-04-17 00:07:19
最明显的方法是反转字符串,另一种方法是使用双引号将单个参数/字符串传递给程序:
./program "a man a plan a canal panama"而不是
./program a man a plan a canal panama这样你就不需要遍历参数了。
发布于 2015-04-17 00:10:12
更新,因为OP说教授将输入句子(没有引号!)。
这可以简单地使用MSVC库函数来完成。因为strdup分配了内存,所以也需要清理。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void fatal(char *msg);
int main(int argc, char *argv[]) {
int i, argslen = 0;
char *inp, *rev;
if (argc < 2) // check num args
fatal("Need a string argument");
for (i=1; i<argc; i++) // figure input length
argslen += strlen(argv[i]) + 1; // include spaces and EOS
inp = malloc(argslen); // memory for concatenation
if (inp == NULL)
fatal("Memory allocation error");
strcpy(inp, argv[1]); // prime with first arg
for (i=2; i<argc; i++) { // concat other args
strcat(inp, " ");
strcat(inp, argv[i]);
}
rev = strdup(inp); // make a copy
if (rev == NULL)
fatal("Memory allocation error");
strrev(rev); // reverse the copy
printf("Testing: \"%s\"\n", inp);
if (stricmp(inp, rev) == 0) // case insensitive test
printf("Is a palindrome\n");
else
printf("Not a palindrome\n");
free (inp); // release mine
free (rev); // release library's
return 0;
}
void fatal(char *msg) {
printf("%s\n", msg);
exit (1);
}程序结果:
>test Able was I ere I saw Elba
Testing: "Able was I ere I saw Elba"
Is a palindrome发布于 2015-04-17 00:17:42
我看到了两个问题:参数的数量是以argc表示的--关于argc和argv[]的更多细节,请参见this question。
关于如何打印原始字符串,您可以在调用reverse()之前打印字符串,将原始字符串存储在一个临时变量中以便稍后输出,或者在打印之前再次反转。第三个选项如下所示:
int main(int argc, char* argv[])
{
char *string = (char*)malloc(1000);
string[0] = '\0';
for(i = 1; i < argc; i++)
strcat(string, argv[i]);
for(j = 0; string[ j ]; j++)
string[j] = tolower(string[ j ]);
reverse(string);
printf("Reverse of entered word is \"%s\".\n", string);
result = is_palindrome(string);
if ( result == 1)
printf("\"%s\" is a palindrome.\n", reverse(string));
else
printf("\"%s\" is not a palindrome.\n", reverse(string));
system("pause");
}https://stackoverflow.com/questions/29679920
复制相似问题