c语言案例——输入一个字符串,将其逆序输出
字符串常量可以賦值給一個字符指針或者一個字符數組,比如:
?/*1*/char *str = “this is a string”;
/*2*/char str2[]= “this is a string”;
/*3*/char str3[100] = “this is a string”;
語句 1 將”this is a string”賦值給了字符指針 str。此時,str 的值為”this is a string”的第一
個字符的地址。實際上,”this is a string”這個常量字符串存儲在 C 語言程序的常量區。而 str
即指向了存儲這個常量字符串的首地址。
語句 2 會將常量區中的”this is a string”拷貝到數組里面。并且數組的長度將為”this is a?
string” (包含’\0’)的長度。
語句 3 會將常量區中的”this is a string”拷貝到數組里面。并且數組的長度將為 100 個字
節。
語句 3 和語句 2 的區別是語句 2 沒有指明數組的長度,那么數組的長度就是字符串的長
度。
對于上面的 3 個賦值表達式,分別使用 sizeof(占的內存空間的大小)?和 strlen(不包含結尾字符‘\0’的字符串個數) 的計算結果又是什么呢?
sizeof(str) = 為指針的長度,所以在 X86 上是 4,在 X64 上是 8。
sizeof(str2)=17。str2 數組的長度,但 str2 沒有顯示指出數組的長度,而是按照分配給它
的字符串的長度來分配。所以,值為 17。
sizeof(str3)=100。Sizeof 計算的是 str3 數組的長度,所以結果為 100。
strlen(str)=16。Strlen 計算的是字符串的字符個數(不喊’\0’)。
strlen(str2)=16。原因同上。
strlen(str3)=16。原因同上。
當然,也可以把字符串存放在動態分配的內存空間中。比如:
char *p = (char *)malloc(100);
if (p == NULL)
return;
memset(p, 0, 100);
strcpy(p, “hello world”);
這樣,以 p 為首地址的內存中將存放著”hello world”這個字符串。
字符數組與字符串關系
char str1[]={‘h’,’e’,’l’,’l’,’o’,’ ‘,’w’,’o’,’r’,’l’,’d’};
char str2[]=”hello world”;
上面的語句定義了 2 個字符數組,其中 str1[]在初始化后,最后一個元素不是’\0’,而 str2[]
在初始化后,最后一個字符是’\0’,因此 str1[]不能當做字符串來處理,而 str2[]是可以當做
字符串來處理的,因為它最后一個字符是’\0’。
函數 strlen()用于計算字符串中的字符個數(不含結尾字符’\0’)
案例:輸入一個字符串,將其逆序輸出?
#include <stdio.h>
#include <string.h>
char *str_reverse(char *str)
{
?? ?int n=strlen(str)/2;
?? ?int i=0;
?? ?char tmp=0; ?//????
?? ?//最右邊的數和最左邊的數交換
?? ?for(i=0;i<n;i++)
?? ?{
?? ??? ?tmp=str[i];
?? ??? ?str[i]=str[strlen(str)-1-i];
?? ? ? ?str[strlen(str)-1-i]=tmp;
?? ?}
?? ?return str;
}
int main()
{
?? ?char s[]="hello world!";
?? ?printf("str_reverse(s)=%s\n",str_reverse(s));
?? ?return 0;
}
?
?
?
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的c语言案例——输入一个字符串,将其逆序输出的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: matlab的知识点1
- 下一篇: c语言的习题