新手求教,关于传递字符串数组的问题

问题描述

新手求教,关于传递字符串数组的问题

以下是我写的c primer plus 第11章习题10的程序,问题是我输入字符串后,用1以外的方式排序,就无法恢复原序列了。也就是每次调用函数都改变了原本数组的顺序,我实在找不到问题出在哪。特请高手指教,如果我的代码还有其他的什么毛病也请指出来。O(∩_∩)O谢谢

#include<stdio.h>
#include<string.h>
#include<ctype.h>
#define LIM 10
#define MAX 81

// 显示菜单函数
void display(void)
{
    puts("******************************************");
    puts("1)Print original string");
    puts("2)Print in order of ASCII");
    puts("3)Print in order of string's length");
    puts("4)Print in order of first word's length");
    puts("5)quit");
    puts("******************************************");
}

// 判断字符串中第一个单词长度
int w_l(const char *s)
{
    int length;

    while(isspace(*s))    // 跳过空白字符
        s++;
    while(*s)             // 遇到空字符就退出循环
    {
        if(!isspace(*s))  //
            length++;
    s++;
    }
    return length;
}

// 原样打印字符串
void opt1(char *msg[], int n)
{
    int i;
    for(i = 0; i<n; i++)
        puts(msg[i]);
}

// 按ASCII码顺序打印字符串
void opt2(char *msg[], int n)
{
    int i, j;
    char *temp;

    for(i = 0; i<n-1 ; i++)
        for(j = i+1; j<n; j++)
            if(strcmp(msg[i], msg[j]) > 0)
            {
                temp = msg[i];
                msg[i] = msg[j];
                msg[j] = temp;
            }
    for(i = 0; i<n; i++)
        puts(msg[i]);
}

// 按字符串长度打印
void opt3(char *msg[], int n)
{
    int i, j;
    char *temp;

    for(i = 0; i<n-1 ; i++)
        for(j = i+1; j<n; j++)
            if(strlen(msg[i]) > strlen(msg[j]))
            {
                temp = msg[i];
                msg[i] = msg[j];
                msg[j] = temp;
            }
    for(i = 0; i<n; i++)
        puts(msg[i]);
}

// 按第一个单词长度打印
void opt4(char *msg[], int n)
{
    int i, j;
    char *temp;

    for(i = 0; i<n-1 ; i++)
        for(j = i+1; j<n; j++)
            if(w_l(msg[i]) > w_l(msg[j]) )
            {
                temp = msg[i];
                msg[i] = msg[j];
                msg[j] = temp;
            }
    for(i = 0; i<n; i++)
        puts(msg[i]);
}

// 调用驱动函数
int main(void)
{
    char msg[LIM][MAX];
    char *ptstr[LIM];
    int i, choice;

    puts("Input strings:");
    for(i = 0; i < LIM && gets(msg[i]) != NULL; i++)     // 将字符串存入数组
    {
        ptstr[i] = msg[i];
    }
    display();
    while(scanf("%d", &choice) == 1 && choice != 5)   // 菜单选择
    {
        switch(choice)
        {
        case 1: opt1(ptstr, i);
            break;
        case 2: opt2(ptstr, i);
            break;
        case 3: opt3(ptstr, i);
            break;
        case 4: opt4(ptstr, i);
            break;
        }
        display();
    }
    puts("Bye.");
    return 0;
}

解决方案

你改写了原数组,你在方法内部声明一个临时数组,来排序,不要改写原有的

解决方案二:

解决方案三:

字符串数组的问题!
字符数组与字符串的问题
15.2.2.5 传递字符串数组

时间: 2024-09-25 15:24:32

新手求教,关于传递字符串数组的问题的相关文章

关于C++用SAFEARRAY传递字符串数组的问题

问题描述 关于C++用SAFEARRAY传递字符串数组的问题 碰到个问题,需要用VARIANT变量传递字符串数组,想到使用SAFEARRAY,就写了如下代码,结果运行出现堆内存错误,请问该如何改正,多谢赐教 int _tmain(int argc, _TCHAR* argv[]) { SAFEARRAY psa; SAFEARRAYBOUND rgsabound[1]; rgsabound[0].cElements=2; rgsabound[0].lLbound=0; psa = SafeArr

新手求教方法传递数组类型的参数

问题描述 具体该怎么实现?应该在类里建数组还是主函数里建?最好有代码看....谢谢 解决方案 解决方案二:publicstaticvoidmain(String[]args){String[]strs={"str1","str3","str4","str4"};printArray(strs);}privatestaticvoidprintArray(String[]array){System.out.println(Arra

android-jni如何传递一个字符串数组?

问题描述 jni如何传递一个字符串数组? 如何传递一个字符串数组? xx.cpp JNIEXPORT jstring JNICALL Hello_Native(JNIEnv *env, jobject obj,jstring string) { const char *str = env->GetStringUTFChars(string, 0); return env->NewStringUTF( "Hello from JNI !"); } static JNINati

新手求教,字符串转换成JSON

问题描述 新手求教,字符串转换成JSON ActiveMQ消息队列:发布者代码:messagePublisher = (SimulatedMarketMessagePublisher)applicationContext.getBean(""messagePublisher""); Message message = new Message(); Head head = new Head(); SimTradeRecord str = new SimTradeRec

c++-新手求助!!C++用const初始化字符串数组报错

问题描述 新手求助!!C++用const初始化字符串数组报错 const char Snames[] = {"Spring", "Summer", "Fall", "Winter"} // error C2078: too many initializers 解决方案 楼主你const char Snames[]只是一个const的普通一维字符数组,不能这样初始化 你要放多个字符串的话可以使用二维数组或者指针数组 const

图片-MFC 编程。接收到的数据为什么都是一个字符一个字符的,这么多的字符串结束符,新手求教

问题描述 MFC 编程.接收到的数据为什么都是一个字符一个字符的,这么多的字符串结束符,新手求教 收到的数据个数是对的,但就是实际数据和字符结束符一样一半.怎么会这样啊 解决方案 给出完整代码 ..... 解决方案二: 楼主看下MFC编码,我也遇到过转换宽字符后就没问题了

新手求教,如何读取txt文档并在每行的字符串后面加上特定的字符串

问题描述 新手求教,如何读取txt文档并在每行的字符串后面加上特定的字符串比如文档里有三行字符串aaaaaabbbbbbcccccc想叫他在后面假上xyzaaaaaaxyzbbbbbbxyzccccccxyz 解决方案 解决方案二:system.iostreamreaderstreamwriter用+就可以了解决方案三:streamreader读出来,streamwriter写进去就行了

新手求教,为什么我的jsp连接mysql,跳出的网页上什么都没有,

问题描述 新手求教,为什么我的jsp连接mysql,跳出的网页上什么都没有, <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import = "java.sql.*"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transiti

新手求教,关于java压缩文件的问题

问题描述 新手求教,关于java压缩文件的问题 import java.io.*;import java.util.zip.*;public class Myzip { private void zip(ZipOutputStream outFile fString base) throws Exception{ if(f.isDirectory()){ File f1[]=f.listFiles(); out.putNextEntry(new ZipEntry(base+""/&qu