字符串是字符的集合,它总是以空字符结尾,这意味着每个字符串在字符串的末尾都包含一个空字符。
例子:
char *pszData = “aticle”;
在上面的示例中,pszData
是指向字符串的指针。 字符串的所有字符都存储在一个连续的内存中,并在字符串的最后一个空字符组成。
见下表:
character ‘a’ ‘t’ ‘i’ ‘c’ ‘l’ ‘e’ ‘\0’
Address 0x00 0x01 0x02 0x03 0x04 0x05 0x06
使用迭代方法反转字符串
方法一:
算法:
- 计算字符串的长度(Len)。
- 初始化数组的索引。
- 开始 = 0,结束 = Len-1
- 在循环中,将
pszData[Start]
的值与pszData[End]
交换。 - 如下更改数组的索引。
- 开始=开始+1; 结束 = 结束 - 1
#include <stdio.h>
#include <stdlib.h>
int main()
{
char acData[100]= {0}, Temp = 0;
int iLoop =0, iLen = 0;
int cnt =0;
printf("\nEnter the string :");
//Maximum takes 100 character
if (fgets(acData,100,stdin) == NULL)
{
printf("Error\n");
return 1;
}
//calculate length of string
while(acData[iLen++] != '\0');
//Remove the null character
iLen--;
//Array index start from 0 to (length -1)
iLen--;
while (iLoop < iLen)
{
Temp = acData[iLoop];
acData[iLoop] = acData[iLen];
acData[iLen] = Temp;
iLoop++;
iLen--;
}
printf("\nReverse string is : %s",acData);
return 0;
}
方法2:
#include <stdio.h>
#include <stdlib.h>
#define SWAP_CHARACTER(a,b) do { \
(*a)^=(*b); \
(*b)^=(*a);\
(*a)^=(*b);\
a++; \
b--; \
}while(0);
int main(int argc, char *argv[])
{
char acData[100]= {0};
char *pcStart = NULL;
char *pcEnd = NULL;
int iLoop =0, iLen = 0;
printf("\nEnter the string :");
//Maximum takes 100 character
if (fgets(acData,100,stdin) == NULL)
{
printf("Error\n");
return 1;
}
//Pointer point to the address of first character
pcStart = acData;
// calculate length of string
while(acData[iLen++] != '\0');
//Remove the null character
iLen--;
pcEnd = (pcStart + iLen-1);
while (iLoop < iLen/2)
{
SWAP_CHARACTER (pcStart,pcEnd);
iLoop++;
}
printf("\nReverse string is : %s
\n",acData);
return 0;
}
反转字符串的递归方法
算法:
- 计算字符串的长度(Len)。
- 初始化数组的索引。
- 开始 = 0,结束 = Len-1
- 将
pszData[Start]
的值与pszData[End]
交换。 - 如下更改数组的索引,并递归调用其余数组的反向函数。
Start = start +1; End = end – 1
#include <stdio.h>
#include <stdlib.h>
//recursive function
void StringRev(char *pszInputData, unsigned int Start, unsigned int End)
{
if(Start >= End)
{
return 1;
}
// swap the data
*(pszInputData + Start) = *(pszInputData + Start) ^ *(pszInputData + End);
*(pszInputData + End) = *(pszInputData + Start) ^ *(pszInputData + End);
*(pszInputData + Start) = *(pszInputData + Start) ^ *(pszInputData + End);
//function called repeatedly
StringRev(pszInputData,Start+1, End-1);
}
int main(int argc, char *argv[])
{
char acData[100]= {0};
int iLen = 0;
unsigned int Start=0;
printf("\nEnter the string :");
//Maximum takes 100 character
if (fgets(acData,100,stdin) == NULL)
{
printf("Error\n");
return 1;
}
// calculate length of string
while(acData[iLen++] != '\0');
//Remove the null character
iLen--;
//Find array last index
iLen--;
StringRev(acData,Start, iLen);
printf("\nReverse string is : %s
\n",acData);
return 0;
}