• ベストアンサー

文字列

文字列をつかったプログラムの練習をしています。 friend fri end のように入力した文字列を半分ずつ表示するプログラムを作りたいんですけど 繰り返しやポインタを使わずに作ることはできますか?

質問者が選んだベストアンサー

  • ベストアンサー
  • yatokesa
  • ベストアンサー率40% (201/496)
回答No.2

char buf[80] = "friend"; char lead[80], tail[80]; int n = strlen(buf) / 2; strncpy (lead, buf, n); lead[n] = '\0'; strcpy (tail, &buf[n]); ---- 文字操作関数に渡すときにポインタ(アドレス)を渡すことになるので、厳密にポインタを排除して、ループ無しで作るのは無理だと思います。

tomo-nao
質問者

お礼

ありがとうございます!! やっぱ無理ですか・・・。わかりました(^-^) ポインタにはまだ慣れてないので、ポインタなしでできたらいいなと思ったのですが。やっぱりポインタって慣れると便利らしいのでがんばって勉強します!!

その他の回答 (1)

  • GOLDEN
  • ベストアンサー率46% (283/607)
回答No.1

strに入った文字列をstr1とstr2に分割するとしますね ------------------------------------------------------------ #include <string.h> (略) strncpy(str1,str,sizeof(str)/2); // strの先頭から半分をコピー str1[sizeof(str)/2] = '\0'; // str1の最後にNullを付加 strcpy(str2,str + (sizeof(str)/2)); // strの残りをコピー (略) ------------------------------------------------------------- でどうでしょう? 厳密にはポインタを使わず・・・ではないですけどね(^^;

tomo-nao
質問者

お礼

ありがとうございます!! あの・・・sizeofってなんですか? 私の持っている参考書に載ってなくて・・・は超ビギナー向けだから?!(>_<)

関連するQ&A

  • 大文字の文字列→小文字の文字列

    C言語初心者です。 ある演習問題をやっていて詰まっています。 自分で入力した大文字の文字列を小文字にするプログラムを作るという問題なのですが、↓の条件があり、こんがらがってしまいました。 ・入力した文字列に小文字が含まれていたら、エラーと表示して再び入力を促し、0を入力するとプログラム終了という流れにする。 ・ポインタ変数を使う。 ・continue文を使う。 ・標準ライブラリ関数は使わない。 です。 ・continue文というのがよくわからない。 ・宣言した関数でどの処理をすればいいのかわからない。 ・大文字を小文字にするというプログラムがわからない。 (アスキーコードをどう使うのか) でつまっています。 どなたかアドバイス・解説・模範解答・指摘などしていただけないでしょうか。 よろしくお願い致します。

  • 文字列での判定

    ファイルポインタの勉強を始めました。 練習として「入力された文字列をsave.txtに保存するただし、endが入力された場合、ループを抜ける」というプログラムを書きたいのですが、うまくできません。結果的には aiueo,kakikukeko と二つの文字列を出力したいです。 見にくいソースですが、ご教授の方、お願いします。 #include <stdio.h> #include <stdlib.h> main(){ FILE *fp; char input[256],input2[256]; if((fp=fopen("save.txt","at"))==NULL){ fprintf(stderr,"ファイルオープンに失敗しました"); exit(1); } do{ printf("文字列を入力してください"); scanf("%s",input); scanf("%s",input2); fprintf(fp,"%s,%s",input,input2); }while(input!="end" || input2!="end"); }

  • 文字列を表すための配列とポインタ

    文字列を表すための配列とポインタ  配列とポインタは同様に扱えるもの、と思って、次のプログラムを作りました。処理系は、Visual Studio 2010 コマンドプロンプトです。 #include <stdio.h> void main(void) { char a[256]; char *b; printf("文字列を入力してください。\n"); printf("例「abcde」\n\n"); printf("配列型文字列を使います。\n"); scanf("%s", a); printf("文字列は%sです。\n\n", a); printf("ポインタ型文字列を使います。\n"); scanf("%s", b); printf("文字列は%sです。\n", b); }  すると、まずコンパイル時に、 「warning C4700: 初期化されていないローカル変数'b'が使用されます」 と表示されました。そして、実行すると、「配列型文字列」の方は問題ないのですが、「ポインタ型文字列」の方の実行後に、 「x.exeは動作を停止しました。 問題が発生したため、プログラムが正しく動作しなくなりま した。プログラムは閉じられ、解決策がある場合は Windowsから通知されます。」 と表示され、エラーとして終了してしまいます。 「char *b;」 と宣言するところが問題のようですが、なぜなのかが分かりません。どなたか、解説をお願いします。

  • 文字列かどうかの判定

    例えばA1セルに入力せれているものが、数字(もしくは文字)であった場合プログラムを実行させようと考えています。 入力されている数字や文字列は一定では有りません。 If 数字(文字)であった場合 Then Call *** end If の様な感じです。 過去ログの文字列検索を探しましたが、使った事の無いコードばかりでアレンジのやり方が全く分かりません。 数字の場合と文字列の場合の2通りの方法をご教示頂きたくよろしくお願い致します。

  • 文字列を比較するプログラムなんですが…

    同じ長さの文字列2個(s1、s2)を辞書的に比較してs1>=s2なら1、s1<s2なら0を返すプログラムを作成せよ。 尚、文字列は小文字でポインタを使う事。 s1がab、s2がacと入力されたならs1>s2となります。 という問題がだされたんですが全くわかりません…。 どなたかご助力お願いします。

  • 文字列

    ・文字列をキーボードから入力する関数を作成する。 書式:char *StrInp(char *pDefStr, int nLen); 引数:char *pDefStf; 初期文字列 int nLen; 入力可能文字数(1~79) 戻り値:正常ならば、入力した文字列の先頭ポインタ、エラー時はNULL。 処理:pDefStrに与えた文字列を初期値とする文字入力を行う。    nLenで指定した文字数まで入力可能とし、その範囲は1~79    までする。入力時の初期カーソル位置は与えた文字列の最後    になります。初期文字列が必要ない場合はヌル文字を与えます。    初期文字列を与えられた場合は、その文字列も更新可能とする。   ・入力の終了は「リターン」キーとする。   ・「BS」キーを押すと、カーソルの1文字前の文字前の文字を    消去する。 という、問いです。難しくてわかりません。どなたかたすけてください。        

  • [C@3331394などの文字列

    Stringを表示させようとして[C@3331394などという文字列("[C@"以下の数字は毎回変わります。)が意図せず出てきてしまい、困っています。これはメモリ番地とかでしょうか?どなたかこのような文字列を見かけたことのあるかた、教えてください。 ちなみにezplusのエミュにてauアプリを開発しています。 http通信をしてサーバから文字列を取ってきて、それを表示する練習用のプログラムを書いてまして、その文字列が問題の文字列になってしまいます。 エミュでも、携帯実機でも出てきてしまいます。

    • ベストアンサー
    • Java
  • 文字列のプログラムについて

    キーボードから入力された1行の文字列を逆順(abc -> cba)にして、 更に大文字なら小文字にし、小文字なら大文字にして表示するプログラムを作る問題です。 とりあえず getcharを使い、キーボードから文字列を入力しその文字列を 配列変数に保存し、その配列変数について変換させるのだと思いますが、 どうしてもgetcharでキーボードからえた文字列を配列変数にいれる方法がわかりません。 教えてください。

  • 文字列の検索

    プログラミングの勉強の際に下のプログラムを作りました。 最初にある文字列を入力して、その後別の文字列を入力して、 後に入力した文字列が最初に入力した文字列に含まれていれば1、 含まれていなければ0と表示するプログラムです。 コンパイルは通るのですが、文字列を2つ入力すると 「セグメンテーション違反です」と表記されます… どこが悪いのでしょうか? どなたか解説・指摘・模範解答などおねがいします。 (使用するのは#include<stdio.h>のみ、ポインタ変数必須です) #include<stdio.h> char *mystrfin(char *a, char *b); int main(void) { char str1[100],str2[100]; printf("1>>"); fgets(str1,100,stdin); printf("2>>"); fgets(str2,100,stdin); *mystrfin(c,d); } char *mystrfin(char *a,char *b){ char *c,*d; while(*c!='\0'){ c=a; d=b; while(*c!='\0' && *d!='\0') if(*c!=*d) printf("0"); break; c++; d++; } if(*d='\0') printf("1"); a++; return a; return NULL; }

  • 8086のアセンブリで文字列の入力方法は?

    8086系のアセンブリでチャットのプログラムを組もうと思っています。 ・・・が、チャットなのに1つの文字を入力する方法しか分かりません。 「文字列」の入力方法は、どうすれば良いのでしょうか?又、入力された文字列を表示させるには・・・? どなたか、教えて頂けないでしょうか?出来れば、方法だけでなくソースも書いて頂けると有り難いのですが・・・ よろしくお願いします。