【藍橋杯_C】個人訓練(2019/11/20)

問題 1093: 字符逆序

題目描述

將一個字符串str的內容顛倒過來,並輸出。str的長度不超過100個字符。

輸入

輸入包括一行。 第一行輸入的字符串。

輸出

輸出轉換好的逆序字符串。

樣例輸入

I am a student

樣例輸出

tneduts a ma I

自己的代碼:

cin 讀取數據時,它會傳遞並忽略任何前導白色空格字符(空格、製表符或換行符)。一旦它接觸到第一個非空格字符即開始閱讀,當它讀取到下一個空白字符時,它將停止讀取。爲了解決這個問題,可以使用一個叫做 getline 的 C++ 函數。 此函數可讀取整行,包括前導和嵌入的空格,並將其存儲在字符串對象中。

eg:    getline(cin, inputLine);

strlen用來獲取字符串的長度

#include<iostream>
#include<cstring>
using namespace std;
int main()
{
	char a[101];
	cin.getline(a,101,'\n');
	for(int b=strlen(a)-1;b>=0;b--){
		cout<<a[b];
	}
}

其他的方法:

1) 用scanf輸入存放到一個字符數組,然後逆序拷貝到另一個字符數組,然後輸出

    scanf("%[^\n]",strin);//除了換行符以外的字符全部接收

    strout[j]='\0';//字符串結束的標誌,輸入回車則顯示字符
 

%s意思是以字符串格式輸出 因此需要加字符串結束標誌符'\0'

#include<stdio.h>
#include<string.h>

int main()
{
	char strin[100];
	int i=0;
	int j=0;
	char strout[100];
	scanf("%[^\n]",strin);//除了換行符以外的字符全部接收
	
	int len=strlen(strin);
	
	for(i=len-1;i>=0;i--){
		
		strout[j]=strin[i];	
		j++;
	}
	strout[j]='\0';//字符串結束的標誌,輸入回車則顯示字符 
	printf("%s\n",strout);
	return 0;
}

在說方法二之前先說一下gets(s)和scanf("%s",s)的區別

1、 gets功能爲讀入一行,並將換行符轉換爲字符串結束符。
2、 scanf("%s",s);讀入時,遇到空白字符,包括空格,製表符,換行符時均會停止輸入。

從功能上可以看出不同之處:
1 終止條件不同。gets只有遇到\n時纔會結束輸入,而scanf遇到空格或製表符時,也會結束輸入
比如輸入"test string\n"。
用gets得到的字符串爲"test string", 二用scanf得到的是"test"。

2 終止後,對終止字符處理不同。
比如輸入爲"test\nabcd"。
執行gets後,\n不會留在緩衝區中,即這時調用getchar得到的字符是'a'。
執行scanf後,\n會留在緩衝區,這時調用getchar得到的字符是'\n'。

2) 用gets接收字符存放在數組中,然後逆序輸出

#include<stdio.h>
#include<string.h>

int main()
{
	char a[100];
	gets(a);
	int l,i;
	l=strlen(a);
	for(i=l-1;i>=0;i--){
		printf("%c",a[i]);
	}
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章