关于#C#的问题,如何解决?

题目:对字符串排序,然后输出到文件中
问题:不能得到正常的结果,未能进行正常排序
使用数据:tomcat apache crossfire
结果为: apach tomcat crossfire
使用软件:VC6.0
运行图片

img

img


代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    FILE * fp;
    int j = 0;
    char str[3][20],tmp[20];
    printf("Please input three strings:\n");
    for(int i = 0; i < 3; i++)
    {
        gets(str[i]);
    }
    for(i = 0; i < 2; i++)    // 选择排序
    {
        int k = i;
        for(j = i+1; j < 3; j++)
        {
            if(strcmp(str[k],str[j]) > 0)
            {
                k = j;
            }
        }
        if(k != i)
        {
            strcpy(tmp,str[i]);
            strcpy(str[i],str[k]);
            strcpy(str[k],tmp);
        }
        if((fp = fopen("D:/test.txt","w")) == NULL)  // 打开文件
        {
            printf("Can not open file!\n");
            exit(0);
        }
        for(i = 0; i < 3; i++)
        {
            fputs(str[i],fp);
            fputs("\n",fp);
        }
        printf("File is done!\n");
    }
    return 0;
}

代码修改如下,改动处见注释,供参考:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
    FILE * fp;
    int j = 0, i;
    char str[3][20],tmp[20];
    printf("Please input three strings:\n");
    for(i = 0; i < 3; i++)
    {
        scanf("%s", str[i]); //gets(str[i]); 修改
    }
    for(i = 0; i < 2; i++)    // 选择排序
    {
        int k = i;
        for(j = i+1; j < 3; j++)
        {
            if(strcmp(str[k],str[j]) > 0)
            {
                k = j;
            }
        }
        if(k != i)
        {
            strcpy(tmp,str[i]);
            strcpy(str[i],str[k]);
            strcpy(str[k],tmp);
        }
    }// 修改
    if((fp = fopen("D:\\test.txt","w")) == NULL)  // 修改
    //if((fp = fopen("D:/test.txt","w")) == NULL)
    {
        printf("Can not open file!\n");
        exit(0);
    }
    for(i = 0; i < 3; i++)
    {
        if (i)            //修改
            fputs(" ",fp);//fputs("\n",fp); 修改
        fputs(str[i],fp);
    }
    printf("File is done!\n");
    fclose(fp);         //修改
    //} 修改
    return 0;
}

你想得到正确的是咋样

  • 以下回答由chatgpt基于相关博客总结生成:

    回答:

    不同的编程语言都可以进行字符串排序。常见的排序算法有冒泡排序、快速排序和归并排序等。

    在Java中,可以使用sort()方法对字符串进行排序。例如,可以使用Arrays类的sort()方法对字符串数组进行排序:

    String[] strArr = {"hello", "world", "java", "programming"};
    Arrays.sort(strArr);
    for (String s : strArr) {
        System.out.println(s);
    }
    

    输出结果为:

    java
    hello
    programming
    world
    

    在C#中,可以使用Array类的Sort()方法对字符串数组进行排序。例如,可以使用以下代码对字符串数组进行排序:

    string[] strArr = {"hello", "world", "csharp", "dotnet"};
    Array.Sort(strArr);
    foreach (string s in strArr) {
        Console.WriteLine(s);
    }
    

    输出结果为:

    csharp
    dotnet
    hello
    world
    

    在Python中,可以使用sort()函数对字符串列表进行排序。例如,可以使用以下代码对字符串列表进行排序:

    strList = ["python", "java", "csharp", "ruby"]
    strList.sort()
    for s in strList:
        print(s)
    

    输出结果为:

    csharp
    java
    python
    ruby
    

    输出到文件的格式可以根据需求进行设定。一般可以使用文本文件格式,如txt文件、csv文件等。对于txt文件,可以使用File类进行文件的读写操作。例如,以下代码将排序结果写入txt文件:

    FileWriter writer = new FileWriter("sortedStrings.txt");
    for (String s : strArr) {
        writer.write(s+"\n");
    }
    writer.close();
    

    在C#中,可以使用StreamWriter类进行文本文件的写入。例如,以下代码将排序结果写入txt文件:

    StreamWriter writer = new StreamWriter("sortedStrings.txt");
    foreach (string s in strArr) {
        writer.WriteLine(s);
    }
    writer.Close();
    

    在Python中,可以使用open()函数进行文本文件的读写操作。例如,以下代码将排序结果写入txt文件:

    with open("sortedStrings.txt", "w") as f:
        for s in strList:
            f.write(s+"\n")
    

    在实际操作中,可能会遇到一些报错信息或者异常。这些信息可以根据具体情况进行调试。一些错误可能与排序算法或者文件操作有关,例如数组越界、无法打开文件等。在排除错误后,可以根据具体需求进行调整和优化。