小寫字串轉成大寫字串

Mars
說明
連續輸入N個字串(-1結束不含-1),並將其存入陣列/容器後,將字串中小寫英文字母轉成大寫後依順序印出
Input Format

字串1(可含空白)
字串...(可含空白)
字串N(可含空白)
-1
Output Format

轉大寫後的字串1(換行)
轉大寫後的字串...(換行)
轉大寫後的字串N(換行)
毫無頭緒..亂寫一通
有勞各位大大
謝謝
#include<stdio.h>
#include<string.h>
#include<ctype.h>
int main(){
	char a[3][40];
	int i,len,b;
	for(i=0;i<3;i++){
		if(a[i]!='-1'){
			scanf("%s",&a[i]);
		}else{
			break;
		}		
		}
	
		for(i=0;i<40;i++){
		printf("%s\n",a[i]);	
	}
	return 0;
}

P陳
有函數可用,直接用函數轉即可
Mars
剛學不是太了解
可否請大大指點迷津
謝謝
香帥
請參考
http://c.biancheng.net/cpp/html/133.html
用toupper()函数
Mars
感謝各位大大回覆
我的疑問如下,謝謝
1.使用者輸入N個字串如何存回二維陣列
2.大小寫轉換a[i]=touper(a[i]);
a[i]為陣列無法放在等號左邊
    #include<stdio.h>
    #include<string.h>
    #include<ctype.h>
    int main(){
    	char a[40][40];
    	int i,len;
    	for(i=0;i<40;i++){
    		scanf("%s",a[i]);
    		for(i=0;sizeof(a);i++){
    			a[i]=touper(a[i]);
    			printf("%s\n",a[i]);
    		}
     
    		}
     
    	return 0;
    }

最有價值解答

o小高o
好像蠻多問題的..ˊˇˋ
我照你的需求寫了一隻簡單的你參考看看?
scanf("%s",a[i]); >> 你的a是宣告char 應該要%c ?
touper() >> 貌似是toupper() to upper 變大寫的function的意思..


#include <stdio.h>
#include<string.h> 
#include<ctype.h> 
int main()
{
    char a[3][3];
    char b[3][3];
    int i,j,len;
    char temp;
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            scanf("%c",&b[i][j]);
            a[i][j]=toupper(b[i][j]);
            //printf("%d,%d\n",i,j);//印出ij二維
        }
    }
    for(i=0;i<3;i++){
        for(j=0;j<3;j++){
            printf("%c\n",a[i][j]);
        }
    }
    return 0;
}


o小高o
補 scanf("%s",a[i][j]); scanf後面是要放位址 所以要加 &
scanf("%s",&a[i][j]); 才對
Mars
感謝小高大大回覆
題目是將使用者輸入文字轉大寫沒錯
請問補在哪....?不太懂
(補 scanf("%s",a[i][j]); scanf後面是要放位址 所以要加 &
scanf("%s",&a[i][j]); 才對)
關於二維陣列有個疑問
宣告char a[4][80];//4列80行
假設使用者輸入4列文字如何儲存?
例如
love
apple
banana
pineapple
以下表示方式正確?
char a[4][80];
int i,j;
for(i=0;i<4;i++){
for(j=0;j<4;j++){
scanf("%c\n",a[i][j])
}
所以使用者輸入每輸入一筆資料都要有個二維陣列對應的記憶體空間存放?
非常感謝




o小高o
補是補充的意思ˊ ˇ ˋ,不用再加進我的code ww
PS:scanf 第二個參數要+ & 你的新PO的scanf還是沒加& scanf("%c\n",a[i][j]) >> scanf("%c\n",&a[i][j])
我原本的就有加只是提醒你這邊你的語法不對XD

應該是說看你怎麼設計,這種做法就是一個一個字存進去
一個陣列a[0][0]裡面就是一個字"A"
C只能存一個字,你要存字串就會變成a[]="Apple";
像是a[0] a[1] a[2] a[3] a[4]
A P P l e
好像比較較少看到用二維存字串的,高階語言比較好寫就string直接存....

上面我原本的做法就像填格子這樣
輸入4列文字我應該會做一個while,輸入一行enter就印一行這樣好像可以省很多事...
不然就是宣告4個陣列去存,要找時間在研究看看ˊ ˇ ˋ 太久沒碰純C 拍謝..

Mars
感謝小高大大耐心解答
小弟剛學問題比較多.....
o小高o
我去載了一下devc跑程式,你要的應該是這樣?

#include <stdio.h>
#include<string.h> 
#include<ctype.h> 
int main()
{
    
    char a[3][3];
    char b[3][3];
    int i=0,j,len;
    char temp;
    while(i<3){    	
    	scanf("%s",&b[i][0]);
    	i++;
	}
	
    for(i=0;i<3;i++){    	
        for(j=0;j<3;j++){            
            a[i][j]=toupper(b[i][j]);
            printf("%d,%d\n",i,j);
        }
    }
    for(i=0;i<3;i++){
    	temp;
    	
        for(j=0;j<3;j++){
            printf("%c",a[i][j]);
        }
        printf("\n");
    }
    
    return 0;
}

o小高o
阿~ 貼得太匆忙.. temp不用理它,那是我在測試寫的ORZ..
發了文好像就不能改了... 我也剛接觸這個網站,還在熟悉..
Mars
感謝小高大大
差一個條件
假設使用者輸入-1程式要終止
還再嘗試怎麼寫
o小高o
這樣試試看?

[code]
#include <stdio.h>
#include<string.h>
#include<ctype.h>
int main()
{

char a[3][3];
char b[3][3];
int i=0,j,len;

while(i<3){
scanf("%s",&b[i][0]);
if(b[i][0]=='-'&&b[i][1]=='1'){
return 0;
break;
}
i++;
}

for(i=0;i<3;i++){
for(j=0;j<3;j++){
a[i][j]=toupper(b[i][j]);
//printf("%d,%d\n",i,j);
}
}
for(i=0;i<3;i++){


for(j=0;j<3;j++){
printf("%c",a[i][j]);
}
printf("\n");
}

return 0;
}
[/code]
Mars
差不多
但輸入-1後小寫要轉大寫
o小高o
把retrun 0 拿掉就好
o小高o
(是while 裡面的return 0 拿掉)
Mars
感謝小高大大
code我研究研究
回到頂部