単語を反転
2025 ワード
文字列内の単語を順番に反転する関数を作成します.ハローワードみたい!ワードになる!hello
効率化版:
#include <iostream>
#include <string.h>
using namespace std;
void strlcpy(char *s1, const char *s2, int n)
{
char *s;
for(s=s1; 0<n&&*s2!='\0';--n)
*s++=*s2++;
*s++='\0';
cout<<s1<<endl;
}
int main()
{
char *buffer;
char str[] ="hello world!";
int len,s,m,n,l=0;
len=strlen(str);
s=len-1;
buffer=(char*) malloc(len+1);
while(s>=0){
if(str[s]==' '){
buffer[l++]=str[s--];
}else {
n=s;
while(s>=0&&str[s]!=' ')
s--;
m=s+1;
while(m<=n){
buffer[l++]=str[m++];
}
}
}
buffer[l]='\0';
strlcpy(str,buffer,len);
free(buffer);
return 0;
}
効率化版:
#include <iostream>
#include <string>
#include <cassert>
using namespace std;
void reverseRange(char* str,int begin,int end)
{
assert(str != NULL);
assert(begin>=0);
assert(end<=strlen(str)-1);
if(begin>=end)
return;
while(begin<=end)
{
char temp = str[begin];
str[begin] = str[end];
str[end] = temp;
begin++;
end--;
}
return;
}
void reverseString(char* str)
{
assert(str!=NULL);
int start=0,end=0,length=strlen(str);
reverseRange(str,0,length-1);
while(end<length){
if(str[end]!=' '){
start=end;
while(end<length&&str[end]!=' ')
end++;
end--;
reverseRange(str,start,end);
}
end++;
}
cout<<str<<endl;
}
int main()
{
char* p = "hello world!";
char* str = (char*)malloc(sizeof(char)*(strlen(p)+1));
strcpy(str,p);
reverseString(str);
free(str);
return 0;
}