Ⅰ 用C++對字元串的排序
沒說不讓用STL吧
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
void temp(vector<string>& list)
{
sort(list.begin(),list.end());
}
int temp_1(vector<string>& list, string str)
{
vector<string>::iterator iter;
iter=find(list.begin(), list.end(), str);
return iter!=list.end();
}
int main()
{
vector<string> list;
string target("nice");
list.push_back("aaaa");
list.push_back("zzzz");
list.push_back("nice");
list.push_back("dddd");
list.push_back("cccc");
temp(list);
for(int i=0;i<list.size();i++)
cout<<list[i]<<endl;
cout<<temp_1(list, target)<<endl;
}
Ⅱ sort()函數對字元串字典序的排序問題
structnode{
charstr[20];
friendbooloperator<(nodea,nodeb){
returnstrcmp(a.str,b.str)<0;
}
}s[55];
intmain(){
intn;
while(scanf("%d",&n)&&n){
for(inti=0;i<n;++i)scanf("%s",s[i].str);
sort(s,s+n);
for(inti=0;i<n;++i)printf("%s ",s[i].str);
}
return0;
}
Ⅲ C語言簡單字元串排序程序,誰幫忙下,會加分的
#include<stdio.h>
#include<search.h>
#include<string.h>
int compare(const void *a,const void *b)
{
if(strlen((char *)a)!=strlen((char *)b))
return strlen((char *)a)-strlen((char*)b);
return (strcmp((char *)a,(char *)b));
}
int main(void)
{
int i;
char mon[8][10]={"January","February","March","April","May","June","July","September"};
qsort(mon,8,sizeof(char)*10,compare);
for(i=0;i<8;i++)
puts(mon[i]);
return 0;
}
參考:http://ke..com/view/982231.htm
Ⅳ 編寫函數實現字元串排序
修改完畢
函數錯了;
1:判斷語句錯了
2:字元串是不能直接賦值的,
修改如下:
WIN-TC編譯通過
#include<stdio.h>
#include<string.h>
void pai(char a[],char b[],char c[])
{
char t[100];
if(strcmp(a,b)>0) {strcpy(t,a);strcpy(a,b);strcpy(b,t);}
if(strcmp(a,c)>0) {strcpy(t,a);strcpy(a,c);strcpy(c,t);}
if(strcmp(b,c)>0) {strcpy(t,b);strcpy(b,c);strcpy(c,t);}
}
void main()
{
char str1[100],str2[100],str3[100];
printf("Enter three strings:");
gets(str1);
gets(str2);
gets(str3);
pai(str1,str2,str3);
puts(str1);
puts(str2);
puts(str3);
getchar();
}
Ⅳ C++用字元串變數做選擇法排序,降序,編譯沒錯,運行起來沒效果.請雷鋒指點。具體見圖片。
你的代碼寫的有問題,請參考這個例子。
#include <iostream>
#include <string>
using namespace std;
void sort_name(string a[]);
int main(void){
//int i,j,k;
int i;
string m[12]={"January","February","March","April","May","June",
"July","August","September","October","November","December"},tmp;
sort_name(m);
for(i=0;i<12;cout << m[i++] << ' ');
cout << endl;
return 0;
}
void sort_name(string a[]) {
int i,j,k;
string tmp;
for(i=0;i<12;i++){
for(k=i,j=k+1;j<12;j++)
if(a[k]>a[j]) k=j;
if(k!=i){
tmp=a[i];
a[i]=a[k];
a[k]=tmp;
}
}
}
Ⅵ 對字元串排序處理
#include <iostream>
#include <string>
using namespace std;
#define N 5 //假設只有5個單詞
int main()
{
int i=0,j=0,k=0,d=0,m=0;
string c[N];//存放單詞
string str[26][N];
cout<<"請輸入"<<N<<"個單詞:"<<endl;
for (i=0;i<N;i++)
{
cin>>c[i];
}
for (j=9;j>=0;j--)//根據基數排序法
{
for (i=0;i<N;i++)
{
k=c[i][j]-97;
if (k<0)
{
k=0;
}
str[k][m++]=c[i];
}
for(i=0,k=0;i<N&&k<26;k++)
for(d=0;d<N;d++)
if (str[k][d][0]>96&&str[k][d][0]<123||str[k][d][0]>64&&str[k][d][0]<91)
{
c[i++]=str[k][d];
str[k][d][0]=32;
}
m=0;
}
cout<<"結果:"<<endl;
for (i=0;i<N;i++)
{
cout<<c[i]<<endl;
}
return 0;
}
Ⅶ C語言:按照字元串的長度排序的問題
編譯有誤
Ⅷ 匯編 編寫一個冒泡排序的方法,把一個字元串裡面的字元進行排序。編譯沒錯誤,可是運行一下就出錯了。
DATA SEGMENT
A DB 32 DUP(0)
M DB 'input A string:',0AH,0DH,'$'
N DB 0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START:
MOV AX,DATA
MOV DS,AX
MOV DX,OFFSET M
MOV AH,09H
INT 21H
MOV BX,0
MOV CX,32
L: MOV AH,01H
INT 21H
MOV A[BX],AL
INC BX
LOOP L
MOV CX,32
LOOP1:
MOV DI,CX
MOV BX,0
LOOP2:
MOV AL,A[BX]
CMP AL,A[BX+1]
JLE CONTI
XCHG AL,A[BX+1]
MOV A[BX],AL
CONTI:
INC BX
LOOP LOOP2
MOV CX,DI
LOOP LOOP1
MOV DX,OFFSET N
MOV AH,09H
INT 21H
MOV BX,0
MOV CX,32
X: MOV DL,A[BX]
MOV AH,02H
INT 21H
INC BX
LOOP X
MOV AH,4CH
INT 21H
CODE ENDS
END START
這個匯編的排序是沒問題的。。。
看別人的程序太麻煩了。。我就直接編了一個
排序沒問題,你當做參考吧。。不知道符合你的要求不
Ⅸ C語言字元串排序
#include <stdio.h>
#include <string.h>
#include <malloc.h>
#define MAX 10
void stsrt(char *str[],int num);
void ASC(char *str[],int num);
void length_add(char *str[],int num);
void word_length(char *str[],int num);
int main(void) {
char *s[MAX],t[80];
int i = 0,n;
printf("輸入%d個字元串 :\n",MAX);
for(i = 0; i < MAX; ++i) {
if(gets(t) && t[0] != '\0') {
s[i] = (char *)malloc(80 * sizeof(char));
strcpy(s[i],t);
}
else break;
}
while(i < MAX && gets(s[i]) && s[i][0] != '\0') i++;
puts("選擇:");
puts("1.輸出初始字元串列表");
puts("2.按ASCⅡ碼順序輸出字元串");
puts("3.按長度遞增順序輸出字元串");
puts("4.按字元串第一個單詞長度輸出字元串");
puts("5.結束");
while(scanf("%d",&n) != 5) {
switch(n) {
case 1:stsrt(s,i);break;
case 2:ASC(s,i);break;
case 3:length_add(s,i);break;
case 4:word_length(s,i);break;
case 5:return 0;
default:puts("輸入錯誤!");
}
}
return 0;
}
void stsrt(char *str[],int num) { //1.輸出初始字元串列表
int n;
for(n = 0;n < num;n++) puts(str[num]);
}
void ASC(char *str[],int num) {//2.按ASCⅡ碼順序輸出字元串
int top,seek;
char *temp;
for(top = 0;top < num - 1;top++) {
for(seek = top + 1;seek < num;seek++)
if(strcmp(str[top],str[seek]) > 0) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
for(int n = 0;n < num;n++) puts(str[n]);
}
void length_add(char *str[],int num) { //3.按長度遞增順序輸出字元串
char *temp;
int top,seek;
for(top = 0;top < num - 1;top++) {
for(seek = top + 1;seek < num;seek++)
if(strlen(str[top]) > strlen(str[seek])) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
for(int n = 0;n < num;n++) puts(str[n]);
}
void word_length(char *str[],int num) {//4.按字元串第一個單詞長度輸出字元串
char *temp;
int top,seek,n,j,len[MAX];
for(n = 0; n < num; ++n) {
len[n] = 0;
j = 0;
while((str[n][j] != ' ') && str[n][j]) {
++len[n];
++j;
}
}
for(top = 0;top < num - 1;top++) {
for(seek = top + 1; seek < num;seek++) {
if(len[top] > len[seek]) {
temp = str[top];
str[top] = str[seek];
str[seek] = temp;
}
}
}
for(n = 0;n < num;n++) puts(str[n]);
}
Ⅹ 怎麼用匯編語言對字元串進行排序
; 本程序通過編譯,運行正確
Code Segment
Assume CS:Code,DS:Code
; -------------------------------------
; 功能:顯示指定地址(Str_Addr)的字元串
; 入口:
; Str_Addr=字元串地址(要求在數據段)
; 用法: Output Str_Addr
; 用法舉例:Output PromptStr
Output MACRO Str_Addr
lea dx,Str_Addr
mov ah,9
int 21h
EndM
; -------------------------------------
; 功能:把AX中的二進制無符號數轉換成顯式的十進制ASCII碼,並送顯示屏顯示
; 入口:AX=二進制數
; 出口:在當前游標位置顯示轉換後的ASCII碼數字
Dec_ASCII Proc Near
push dx
push bx
push di
mov bx,10
lea di,@@Temp_Save[6]
mov byte ptr [di],'$'
dec di
cld
@@Divide: xor dx,dx
div bx
or dl,30h
mov [di],dl
dec di
test ax,0ffffh
jnz @@Divide
inc di
push di
pop dx
mov ah,9
int 21h
pop di
pop bx
pop dx
ret
@@Temp_Save db 7 p(?)
Dec_ASCII EndP
; -------------------------------------
Vowel db 'aeiou'
Prompt_Str db 'Please input a string or phrase: $'
Vowel_Prom db 13,10,13,10,'Vowels: $'
Conso_Prom db 13,10,'consomants: $'
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
Input_Str: Output Prompt_Str ;提示輸入字元串
lea dx,Buffer ;字元串緩沖區地址
mov ah,0ah
int 21h
lea si,Buffer[1] ;實際輸入的字元數地址
cld
lodsb
test al,0ffh
jz Input_Str ;若直接回車,沒有輸入任何字元,則請重新輸入
mov cl,al
xor ch,ch
xor bx,bx ;計數器清零,bh=母音字母計數器,bl=輔音字母計數器
Vowel_conso:lodsb
or al,20h ;轉換成小寫
cmp al,'a'
jb Next_One ;小於'a',不是字母,不計數
cmp al,'z'
ja Next_One ;大於'z',不是字母,不計數
push cx
lea di,Vowel ;母音字元串地址
mov cx,5 ;母音字母個數
repnz scasb ;掃描當前字母是否是母音字母
jcxz $+6
inc bh ;母音字母計數
jmp short $+4
inc bl ;輔音字母計數
pop cx
Next_One: loop Vowel_conso
Output Vowel_Prom ;提示顯示母音字母個數
mov al,bh
xor ah,ah
call Dec_ASCII ;顯示母音字母個數
Output Conso_Prom ;提示顯示輔音字母個數
mov al,bl
xor ah,ah
call Dec_ASCII ;顯示輔音字母個數
mov ah,7 ;不帶回顯的鍵盤輸入,即等待按鍵(暫停),結束程序
int 21h
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Buffer db 255,0 ;字元串緩沖區
Code ENDS
END Start ;編譯到此結束