输入一个句子按照字典序输出单词



package 字符串;

import java.util.Scanner;

public class SentenceCount {

    public static void main(String[] args) {
        // TODO 自动生成的方法存根
     Scanner sc = new Scanner(System.in);
     String sentence =sc.nextLine();
     int count=0;//句子数
     String zimu[]=sentence.split("");
     String word[]=sentence.split(" ");
   char arr[]=new char[200];
     for(int i=0;ichar b=zimu[i].charAt(0);
         int c=b;
    
        System.out.print(zimu[i]);
         if(c==33||c==63||c==46) {
             count++;
             System.out.println("");
         }     
     }

     System.out.println(count);
      
      
     for(int i=0;i200]=word[i].charAt(0);
      }
      char temp=0;
      for(int i=1;i<200;i++) {
          if((int)arr[i]>(int)arr[i-1]) {
             
              temp=arr[i];
              arr[i]=arr[i-1];
             arr[i-1]=temp;         
          }
         for(int j=0;jSystem.out.println(arr[j]);
           }
      } 
    }

}

为什么运行不了怎么改呢

试试👀

package 字符串;

import java.util.Scanner;

public class SentenceCount {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String sentence = sc.nextLine();
        int count = 0; //句子数
        String[] zimu = sentence.split(""); // 按字符分割字符串
        String[] word = sentence.split(" "); // 按空格分割字符串
        char[] arr = new char[200];
        for (int i = 0; i < zimu.length; i++) {
            if (!zimu[i].isEmpty()) { // 检查字符是否为空
                char b = zimu[i].charAt(0);
                int c = b;
                System.out.print(zimu[i]);
                if (c == 33 || c == 63 || c == 46) { // 根据ASCII码判断是否为句子结束符
                    count++;
                    System.out.println("");
                }
            }
        }
        System.out.println(count);

        for (int i = 0; i < word.length; i++) {
            arr[i] = word[i].charAt(0); // 将单词的首字母保存到字符数组中
        }
        char temp = 0;
        // 冒泡排序,将单词首字母按字母表顺序排列
        for (int i = 0; i < word.length - 1; i++) {
            for (int j = i + 1; j < word.length; j++) {
                if ((int) arr[i] > (int) arr[j]) {
                    temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        // 打印排序后的单词首字母
        for (int j = 0; j < word.length; j++) {
            System.out.println(arr[j]);
        }
    }
}
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/7566101
  • 这篇博客也不错, 你可以看下查找字符数组中出现次数最多的字符
  • 除此之外, 这篇博客: 数据结构 严薇敏 队列 的实现及其使用方法详解中的 出队列 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • //出队列
    //其实就是带头单链表的头删
    void QueuePop(Queue* p)
    {
    
    	Queuenode* Delnode = NULL;
    	//先判断是否为空
    	if (QueueEmpty(p)) {
    		return;
    	}
    	//标记删除节点,头删
    	Delnode = p->front->next;
    	//然后在连接起来
    	p->front->next = Delnode->next;
    	//队列中刚好只有一个元素,删除之后应该要将队尾back放在头节点的位置
    	if (Delnode == p->back) {
    		p->back = p->front;
    	}
    	free(Delnode);
    }
    1. 头出队列先用DelNode标记要删除的节点。
    2. 移动头指针,让头结点出队列。
    3. 队列中刚好只有一个元素,删除之后应该要将队尾back放在头节点的位置
  • 您还可以看一下 孙玖祥老师的图解数据结构与算法课程中的 循环队列的入队出队扩容操作小节, 巩固相关知识点