問題 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;
}