我在学校接受了编写程序的任务
这是我到目前为止的程序。字符串都存储在不同的变量中,这使得它们难以排序。如果有人能帮助我完成这个项目,我将非常感激。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word1[101];
char word2[101];
char* word3;
char buffer[101];
scanf("%s", word1);
scanf("%s", word2);
scanf("%s", buffer);
word3 = (char *) malloc(strlen(buffer)+1);
strcpy(word3, buffer);
return 0;
}
答案 0 :(得分:3)
您可以使用strcmp() function
来比较字符串。
此外,在完成之前,请不要忘记使用word3
功能清除free()
指向的内存。
答案 1 :(得分:2)
使用strcmp按字母顺序查找第一个单词。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
char word1[101];
char word2[101];
char* word3;
char buffer[101];
scanf("%s", word1);
scanf("%s", word2);
scanf("%s", buffer);
char* smallestword = word1;
if (strcmp(smallestword,word2) > 0) // smallest is bigger than word2
smallestword = word2;
if (strcmp(smallestword,buffer) > 0) // smallest is bigger than buffer
smallestword = buffer;
word3 = (char *) malloc(strlen(smallestword)+1);
strcpy(word3, buffer);
return 0;
}
答案 2 :(得分:0)
这是程序,包括获取最小单词的最后4个字符的子串的代码。还修复了一个错误,其中word3
始终设置为最后一个单词输入(buffer
),而不是smallestword
按预期设置。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main() {
char word1[101];
char word2[101];
char* word3;
char buffer[101];
scanf("%s", word1);
scanf("%s", word2);
scanf("%s", buffer);
char* smallestword = word1;
if (strcmp(smallestword,word2) > 0) // smallest is bigger than word2
smallestword = word2;
if (strcmp(smallestword,buffer) > 0) // smallest is bigger than buffer
smallestword = buffer;
word3 = (char *) malloc(strlen(smallestword)+1);
strcpy(word3, smallestword);
int m = strlen( word3 ), n = m - 4; // set offsets for substr
char* word3_substr = (char *) malloc(m-n);
strncpy( word3_substr, word3+n, m-1 );
printf( "%s", word3_substr );
return 0;
}
答案 3 :(得分:0)
我会概括,构建一个指针数组并使用最小的冒泡排序算法对其进行排序(或者在stdlib中使用qsort,更好,因为你没有对其进行加密),如果按升序排列,则第一个指针指向你需要的字符串。即使它是家庭作业,我认为你应该概括(如果单词是4或5 ......?)并学习如何概括这些任务。
char *ptrs[] = { word1, word2, NULL };
// later you initilize third too
ptrs[2] = word3;
// use qsort with strcmp as comp. function
qsort(ptrs, sizeof(void *), 3, mwstrcmp);
// ...
// pick firts ptr
char *first = ptrs[0];
// print last 4 chars, see other answers or:
// an alternative naive way of getting last 4 chars printed
int l = strlen(first);
char *fourstr = first;
if ( l > 4 ) fourstr += l - 4;
printf("%s", fourstr); // if length is < 4, it prints the whole string.
修改
mwstrcmp
是一个取消引用指针的包装器,因为qsort传递指向对象的指针(指针......):
int mwstrcmp(const char **a, const char **b)
{
return strcmp(*a, *b);
}
(警告可能现在懒得检查......)
答案 4 :(得分:0)
如果要对字符串进行排序,请先将它们存储到数组中并生成Bubble Sort。您还可以使用此算法对链接列表中的字符串进行排序。