C言語で文字列を逆順に出力する方法:forループとstrrev関数を使ったサンプルプログラム
この記事では、ライブラリの定義済み関数に頼らずに文章を逆順に出力するCプログラムを紹介します。forループを活用することで、入力されたメッセージを簡単に逆順で表示できます。
プログラム1:forループで文字列を逆順に出力する
#include<stdio.h>
int main(){
char stmt[100];
int i;
printf("enter the message:\n");
for(i=0;i<100;i++){
stmt[i]=getchar(); //Enterキー(改行文字)が押されるまで、コンソールから1文字ずつ読み込む
if(stmt[i]=='\n')
break;
}
printf("the reverse statement is:\n");
for(i--;i>=0;i--) //各文字を逆順に出力する
putchar(stmt[i]);
putchar('\n');
return 0;
}
実行結果
enter the message: Hi welcome to my world the reverse statement is: dlrow ym ot emoclew iH
プログラムの仕組み
最初のforループでは、getchar()関数を使ってコンソールから1文字ずつ読み込み、配列stmtに順番に格納していきます。ユーザーがEnterキーを押すと改行文字('\n')が検出され、break文によってループが終了します。
続く2つ目のforループでは、ループ変数iを1つ減らした値から開始し、配列の末尾から先頭に向かって各文字をputchar()で出力します。これにより、入力されたメッセージ全体が逆順に表示されます。
プログラム2:strrevライブラリ関数を使う方法
次に、strrevライブラリ関数を使用して文字列を反転させるCプログラムを見てみましょう。
#include<stdio.h>
#include<string.h>
void main(){
//2つの文字列を宣言//
char result[50],string[25];
//反転する文字列を読み込む//
printf("Enter String to be reversed : ");
gets(string);
//ライブラリ関数を使って反転//
strrev(string);
printf("The reversed string is : ");
puts(string);
}
実行結果
Enter String to be reversed : Hi welcome to tutorials Point The reversed string is : tnioP slairotut ot emoclew iH
注意点
strrev()は標準Cライブラリには含まれておらず、Turbo Cなど一部のコンパイラ環境でのみ利用できる非標準関数であることに注意が必要です。また、gets()はバッファオーバーフローを引き起こす危険性があるため、現在では使用が推奨されていません。実際の開発では、fgets()などの安全な入力関数を使うことが望ましいでしょう。
-
C言語のisupper()関数を使って文字列内の大文字数をカウントする方法
問題概要 C言語プログラミングでは、入力された文字列の中に大文字アルファベットが何文字含まれているのかを調べたい場面があります。本記事では、標準ライブラリのisupper()関数を使う方法と、使わずに実現する方法の2つのアプローチを、サンプルコード付きで解説します。 解決策:大文字をカウントするロジック 文中の大文字の数を数えるために使用したロジックは以下の通りです。 for(a=string[0];a!=\0;i++){ a=string[i]; if (isupper(a)){ counter=counter+1; //counter++;
-
【C言語】strncmpライブラリ関数を使って2つの文字列を比較するプログラムの作り方
strncmpは、C言語のヘッダーファイル「string.h」に定義されている標準ライブラリ関数の一つです。この関数を使用すると、2つの文字列を比較し、どちらの文字列が大きい(辞書順で後ろにある)のかを判定することができます。 strcmp関数(文字列比較) strcmp関数は、2つの文字列を比較するための関数です。戻り値として、両方の文字列の中で最初に一致しなかった文字同士のASCIIコードの差を返します。 構文 int strcmp(string1, string2); 差が0の場合:string1 = string2(2つの文字列は等しい) 差が正の値の場合:string1 &