C字符串程序

时间:2010-06-07 04:20:14

标签: c string

我在学校接受了编写程序的任务

  • 读取三个字符串
  • 将第三个字符串存储在动态分配的内存中
  • 按字母顺序打印第一个单词的最后4个字母。

这是我到目前为止的程序。字符串都存储在不同的变量中,这使得它们难以排序。如果有人能帮助我完成这个项目,我将非常感激。

#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;
}

5 个答案:

答案 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。您还可以使用此算法对链接列表中的字符串进行排序。