回答受付が終了しました

質問です。 C言語でポインタを用いて入力した文字列を逆順に表示するという問題なのです。

C言語関連117閲覧xmlns="http://www.w3.org/2000/svg">25

回答(4件)

0

#include <stdio.h> #include <stdlib.h> #include <string.h> #define ___ void put_nchar_rev(const char *s, size_t n) { ___ for (const char *p = s + n; p > s; putchar(*--p)) ___ ___ ; } int main(void) { ___ size_t n; ___ char s[256]; ___ size_t len; ___ if (scanf("%zu", &n) != 1){ ___ ___ return EXIT_FAILURE; ___ } ___ if (scanf("%255s", s) != 1){ ___ ___ return EXIT_FAILURE; ___ } ___ len = strlen(s); ___ if (len > n){ ___ ___ put_nchar_rev(s, n); ___ ___ put_nchar_rev(s + n, len - n); ___ } else { ___ ___ put_nchar_rev(s, len); ___ } ___ return EXIT_SUCCESS; }

0

~例~ #include <stdio.h>#include <string.h>int main() { char s[] = "computer";//入力文字列 //追加で指定した番号の文字から逆順に表示する int n = 4;//指定した番号 if (1 <= n) {//n が 1 以上であることを確認 const size_t length = strlen(s); //文字列の長さ if (n <= length) {//n が length 以下であることを確認 for (const char* p = &s[n];;) { putchar(*--p); if (p == s) {//出力した文字は先頭だった p = &s[length];//終わりの文字を指す while (&s[n] <p) putchar(*--p); break; } } } } } 《解説》 折り返し点からの出力処理が難しくなっています。 ポインタ変数 p が s と等しくなったら、そこで折り返しです。そこで p を変更して終わりの文字を指すようにします。あとは while 文で出力開始点までを出力する形とします。

0

質問者さんにではなく、出題者さんに言いたいのですが、ここはポインタを使うところではないでしょう。安全、確実、簡単なコードを目指すべきです。 質問者さんには、題意の答えになっていなくてすみません。 #include <stdio.h> #include <string.h> int main() {     const int bufflen = 1000;     char Text[bufflen];     int start = 1;     printf("text="); scanf_s("%[^\n]", Text, bufflen);     printf("start="); scanf_s("%d", &start);     int length = strlen(Text);     start--;     if (start < 0) { start = 0; }     if (start >= length) { start = length - 1; }     int index = start;     for (int i = 0; i < length; i++) {         putchar(Text[index]);         if (--index < 0) { index = length - 1; }     } }

0

(hon********さん) 例: #include <stdio.h> int main(void) { char s[128]; char *p; int n, len=0; printf("string >"); scanf("%s",s); printf("start >"); scanf("%d",&n); while(s[len])len++; if(n>len){ puts("input error"); return 1; } p=s+n-1; while(p>=s) { putchar(*p); p--; } p=s+len-1; while(p>=(s+n)) { putchar(*p); p--; } putchar('\n'); return 0; } ~~~~~~~~~~~~~~~ string >computer start >4 pmocretu